我从传感器得到数据。有些时候他们无缘无故地回到我身边!
在数据清理期间。我可以用这个
blank string

    Time    IL1 IL2 IL3 IN  kVA kW  kWh
12463   2018-09-17 10:30:00 63.7    78.4    53.3    25.2    NaN NaN 2039676.0
12464   2018-09-17 11:00:00 64.1    78.6    53.5    25.4    NaN NaN 2039698.0

如何才能从NaN中取出df[df.isnull().values.any(axis=1)]
然后我可以从其他行中找到kVA and kWDataFrame,并用它替换median
我的用例:
现在我必须读取文件并找到kVA and KW列的位置。这需要我的努力。所以我想通过替换列名上的硬代码来自动化这个过程。
trdb_a2_2018_df = pd.read_csv(PATH + 'dpm_trdb_a2_2018.csv', thousands=',', parse_dates=['Time'], date_parser=extract_dt)
trdb_a2_2018_df = trdb_a2_2018_df.replace(r'\s+', np.nan, regex=True)
median_kVA = trdb_a2_2018_df['kVA'].median()
trdb_a2_2018_df = trdb_a2_2018_df['kVA'].fillna(median_kVA)

最佳答案

我相信你需要fillnamedian

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,np.nan],
         'C':[7,np.nan,9,4,2,3],
         'D':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

print (df)
   A    B    C  D  E  F
0  a  4.0  7.0  1  5  a
1  b  5.0  NaN  3  3  a
2  c  4.0  9.0  5  6  a
3  d  5.0  4.0  7  9  b
4  e  5.0  2.0  1  2  b
5  f  NaN  3.0  0  4  b

df1 = df.fillna(df.median())
print (df1)
   A    B    C  D  E  F
0  a  4.0  7.0  1  5  a
1  b  5.0  4.0  3  3  a
2  c  4.0  9.0  5  6  a
3  d  5.0  4.0  7  9  b
4  e  5.0  2.0  1  2  b
5  f  5.0  3.0  0  4  b

如果还需要在列中安装NaNs:
m = df.isnull().any()
df.loc[:, m] = df.loc[:, m].fillna(df.loc[:, m].median())

备选方案:
cols = df.columns[df.isnull().any()]
df[cols] = df[cols].fillna(df[cols].median())

详细信息:
print (df.median())
B    5.0
C    4.0
D    2.0
E    4.5
dtype: float64

关于python - 当行为NaN时获取 Pandas 头,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53882610/

10-09 12:44