gpt4 book ai didi

python-2.7 - 用索引值填充 pandas DataFrame nan

转载 作者:行者123 更新时间:2023-12-03 16:44:17 26 4
gpt4 key购买 nike

我有一个包含 nan 值的 DataFrame 。我想用索引值填充这些 nan 。实际用例是使用包含索引值的字符串模板填充 nan,您可以将其作为奖励来回答。

给定:

In [31]: df
Out[31]:
0 1 2 3
0 NaN 0.069419 NaN NaN
1 2.439000 1.943944 0.279904 0.755746
2 0.013795 1.189474 0.834894 2.202108
3 0.520385 NaN NaN 1.451822
4 0.153863 0.957394 NaN 0.052726
5 1.274204 NaN NaN 0.169636
6 NaN 1.031703 NaN 0.267850
7 0.419157 NaN NaN 0.409045
8 NaN 1.526764 0.947936 0.442226
9 NaN NaN NaN 0.458331

In [35]: tmp
Out[35]: 'i=%(idx)s'

输出应类似于以下内容:

          0         1         2         3
0 i=0 0.069419 i=0 i=0
1 2.439000 1.943944 0.279904 0.755746
2 0.013795 1.189474 0.834894 2.202108
3 0.520385 i=3 i=3 1.451822
4 0.153863 0.957394 i=4 0.052726
5 1.274204 i=5 i=5 0.169636
6 i=6 1.031703 i=6 0.267850
7 0.419157 i=7 i=7 0.409045
8 i=8 1.526764 0.947936 0.442226
9 i=9 i=9 i=9 0.458331

只是尝试用索引填充nan

尝试过

In [32]: df.fillna(df.index)

ValueError: invalid fill value with a <class 'pandas.core.index.Int64Index'>

尝试过

In [33]: df.replace(np.nan, df.index)

TypeError: Invalid "to_replace" type: 'float'

已尝试

In [41]: df.fillna(df.index.values)

ValueError: invalid fill value with a <type 'numpy.ndarray'>

尝试过

In [53]: df1 = df.astype(object)

重复上述操作,收到相同的错误。

使用pandas==0.17.1

最佳答案

与使用 where 的 @maxymoo 解决方案类似,但使用 pd.Series 而不是 lambda:

s = pd.Series(['i={}'.format(i) for i in df.index])

In [49]: df.where(df.notnull(), s, axis=0)
Out[49]:
0 1 2 3
0 i=0 0.069419 i=0 i=0
1 2.439 1.94394 0.279904 0.755746
2 0.013795 1.18947 0.834894 2.20211
3 0.520385 i=3 i=3 1.45182
4 0.153863 0.957394 i=4 0.052726
5 1.2742 i=5 i=5 0.169636
6 i=6 1.0317 i=6 0.26785
7 0.419157 i=7 i=7 0.409045
8 i=8 1.52676 0.947936 0.442226
9 i=9 i=9 i=9 0.458331

时机:

def f1():
nan_strings = ["i={}".format(i) for i in df.index]
df.apply(lambda c: c.where(c.notnull(), nan_strings))

def f2():
s = pd.Series(['i={}s'.format(i) for i in df.index])
df.where(df.notnull(), s, axis=0)

In [51]: %timeit f1()
100 loops, best of 3: 5.17 ms per loop

In [52]: %timeit f2()
1000 loops, best of 3: 1.34 ms per loop

关于python-2.7 - 用索引值填充 pandas DataFrame nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35593337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com