字符串的
import numpy as np
import pandas as pd
df_margin=pd.DataFrame({"item":["a","b","c",np.nan],"margin":[3,4,5,np.nan]})
给定上面代码的下表,我想填充字符串为"&";,对于数字为-1,如何自动假设我有很多列?
item margin
0 a 3.0
1 b 4.0
2 c 5.0
3 NaN NaN
df_margin=pd.DataFrame({"item":["a","b","c","],"margin":[3,4,5,-1]}(期望结果
item margin
0 a 3
1 b 4
2 c 5
3 -1
原因是我想把表作为json传递,但它不支持nan值,也欢迎更好的方法。
df_margin[df_margin.select_dtypes('object').columns] = df_margin.select_dtypes('object').fillna(' ')
对于数字
df_margin[df_margin.select_dtypes('number').columns] = df_margin.select_dtypes('number').fillna(-1)
通过select_dtypes过滤数据帧,然后用所需值过滤NaN
(include=None, exclude=None)
:
item margin
0 a 3.0
1 b 4.0
2 c 5.0
3 -1.0
输出:
>>> df_margin.apply(lambda x: x.fillna(-1) if x.dtype.kind in 'biufcSUV' else x.fillna(''))
item margin
0 a 3.0
1 b 4.0
2 c 5.0
3 -1.0
注意:
- 您可以进一步探索
dtype.kind
的不同值 - 我建议使用映射字典(object_type/fill_value(。如果你想有更多的细粒度控制
您可以尝试使用apply
和'biufcSUV'
方法来获得您想要的结果。
方法一:
dtype.kind
A character code (one of ‘biufcOSUV’) identifying the general kind of data.
b boolean
i signed integer
u unsigned integer
f floating-point
c complex floating-point
O object
S (byte-)string
U Unicode
V void
注意:要了解有关dtype.kind
的更多信息,请阅读CCD_8
文档说明:
df_margin.fillna({'item':'', 'margin':'-1'})
# df_margin.fillna({'item':'', 'margin':'-1'}, inplace=True)
item margin
0 a 3
1 b 4
2 c 5
3 -1
方法二:
这种方法我觉得更优雅。
df_margin['item'] = df_margin.select_dtypes("object").fillna("")
df_margin['margin'] = df_margin.select_dtypes("float64").fillna("-1")
df_margin
item margin
0 a 3
1 b 4
2 c 5
3 -1
方法三:
df_margin.fillna(df_margin.dtypes.replace({'float64': -1, 'object': ''}))
item margin
0 a 3.0
1 b 4.0
2 c 5.0
3 -1.0
或
PD_13