我从传感器获取数据.有些时候他们blank string无缘无故地回到我身边!
在数据清理期间.我可以设法NaN使用它来获取列
df[df.isnull().values.any(axis=1)]
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
Run Code Online (Sandbox Code Playgroud)
我怎么能kVA and kW离开DataFrame?
然后,我能找到median的kVA and KW与其他行并更换NaN它
我的用例:
现在我必须读取文件并找到NaN列的位置.这需要我的努力.所以我想通过替换列名上的硬编码来自动化该过程.
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)
Run Code Online (Sandbox Code Playgroud)
我相信你需要fillna有median:
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
Run Code Online (Sandbox Code Playgroud)
如果想NaN在列中也适合:
m = df.isnull().any()
df.loc[:, m] = df.loc[:, m].fillna(df.loc[:, m].median())
Run Code Online (Sandbox Code Playgroud)
替代方案:
cols = df.columns[df.isnull().any()]
df[cols] = df[cols].fillna(df[cols].median())
Run Code Online (Sandbox Code Playgroud)
细节:
print (df.median())
B 5.0
C 4.0
D 2.0
E 4.5
dtype: float64
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |