我有一个文件,其中多个值均为空,我只需要在存在值的情况下更改值并保持空值即可。 以下是我正在尝试的方法,但同时它也在更改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)
答案 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