不要使用熊猫处理CSV文件中的空值

时间:2019-07-05 05:33:02

标签: python pandas

我有一个文件,其中多个值均为空,我只需要在存在值的情况下更改值并保持空值即可。 以下是我正在尝试的方法,但同时它也在更改Null值(?)。请建议可以做什么。

输入文件

A           B         C
XC123     CXW12     3.43
XC123       ?       11.44
CQ123     AB123     21.23
XC781       ?       44.22
SC568     AB123     2.12
SC568       ?       32.43
DC743     CXW12     324.78
XC123       ?       -6432.93

预期的输出文件:

A       B         C
A0      B0      3.43
A0              11.44
A1      B1      21.23
A2              44.22
A3      B1      2.12
A3              32.43
A4      B0      324.78
A0              -6432.93

代码:

df=pd.read_csv('file.csv')

df_mask=pd.DataFrame({
            'A':['A{}'.format(i) for i in list(pd.factorize(df['A'])[0])],
            'B':['B{}'.format(i) for i in list(pd.factorize(df['B'])[0])],
            'C':df['C'].values.tolist(),
            })

df_mask.to_csv(finalOutput, sep=',', index=False)

1 个答案:

答案 0 :(得分:3)

想法是使用read_csv中的na_values参数将?转换为错误值,然后factorize默认为它们返回-1,因此添加了{{ 1}}语句:

if-else

另一个想法是使用numpy.where

df=pd.read_csv('file.csv', na_values=['?'])

df_mask=pd.DataFrame({
            'A':['A{}'.format(i) if i != -1 else '' for i in (pd.factorize(df['A'])[0])],
            'B':['B{}'.format(i) if i != -1 else ''  for i in (pd.factorize(df['B'])[0])],
            'C':df['C'].values.tolist(),
            })

print (df_mask)
    A   B        C
0  A0  B0     3.43
1  A0        11.44
2  A1  B1    21.23
3  A2        44.22
4  A3  B1     2.12
5  A3        32.43
6  A4  B0   324.78
7  A0     -6432.93