进行如下设置:

import pandas as pd
import numpy as np

#Create random number dataframes
df1 = pd.DataFrame(np.random.rand(10,4))
df2 = pd.DataFrame(np.random.rand(10,4))
df3 = pd.DataFrame(np.random.rand(10,4))

#Create list of dataframes
data_frame_list = [df1, df2, df3]

#Introduce some NaN values
df1.iloc[4,3] = np.NaN
df2.iloc[1:4,2] = np.NaN

#Create loop to ffill any NaN values
for df in data_frame_list:
    df = df.fillna(method='ffill')


仍然使df2(例如)为:

           0           1           2           3
0   0.946601    0.492957    0.688421    0.582571
1   0.365173    0.507617         NaN    0.997909
2   0.185005    0.496989         NaN    0.962120
3   0.278633    0.515227         NaN    0.868952
4   0.346495    0.779571    0.376018    0.750900
5   0.384307    0.594381    0.741655    0.510144
6   0.499180    0.885632    0.13413     0.196010
7   0.245445    0.771402    0.371148    0.222618
8   0.564510    0.487644    0.121945    0.095932
9   0.401214    0.282698    0.0181196   0.689916


虽然各行代码:

df2 = df2.fillna(method='ffill)


确实有效。我认为问题可能是由于我为变量命名的方式所致,所以我引入了global()[df],但这似乎也不起作用。

想知道是否可以在for循环中填充整个数据帧,还是我的方法出错了?

最佳答案

您只能在DataFrames列表中更改DataFrame,因此df1 - df3不会被ffill和参数inplace=True更改:

data_frame_list = [df1, df2, df3]
for df in data_frame_list:
    df.ffill(inplace=True)

print (data_frame_list)




[          0         1         2         3
0  0.506726  0.057531  0.627580  0.132553
1  0.131085  0.788544  0.506686  0.412826
2  0.578009  0.488174  0.335964  0.140816
3  0.891442  0.086312  0.847512  0.529616
4  0.550261  0.848461  0.158998  0.529616
5  0.817808  0.977898  0.933133  0.310414
6  0.481331  0.382784  0.874249  0.363505
7  0.384864  0.035155  0.634643  0.009076
8  0.197091  0.880822  0.002330  0.109501
9  0.623105  0.999237  0.567151  0.487938,           0         1         2         3
0  0.104856  0.525416  0.284066  0.658453
1  0.989523  0.644251  0.284066  0.141395
2  0.488099  0.167418  0.284066  0.097982
3  0.930415  0.486878  0.284066  0.192273
4  0.210032  0.244598  0.175200  0.367130
5  0.981763  0.285865  0.979590  0.924292
6  0.631067  0.119238  0.855842  0.782623
7  0.815908  0.575624  0.037598  0.532883
8  0.346577  0.329280  0.606794  0.825932
9  0.273021  0.503340  0.828568  0.429792,           0         1         2         3
0  0.491665  0.752531  0.780970  0.524148
1  0.635208  0.283928  0.821345  0.874243
2  0.454211  0.622611  0.267682  0.726456
3  0.379144  0.345580  0.694614  0.585782
4  0.844209  0.662073  0.590640  0.612480
5  0.258679  0.413567  0.797383  0.431819
6  0.034473  0.581294  0.282111  0.856725
7  0.352072  0.801542  0.862749  0.000285
8  0.793939  0.297286  0.441013  0.294635
9  0.841181  0.804839  0.311352  0.171094]

关于python - Python Pandas fillna无法在for循环中使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47035399/

10-13 09:14