Gav*_*vin 1 python dataframe pandas
我正在将 csv 文件读入熊猫数据帧。
df= pd.read_csv("table.csv", encoding = 'ISO-8859-1')
Run Code Online (Sandbox Code Playgroud)
我有一个名为“value”的列,当值为 nil 时,它包含“-”。我的目标是过滤掉此列中值为 nil 的所有行。
然而,当值为负时,也包含符号。
当我尝试:
df['value'] = df['value'].str.replace(',', '')
df['value'] = df['value'].str.replace('-', '0')
df['value'] = df['value'].astype(str).astype(float)
df= df[df['value'] !=0]
Run Code Online (Sandbox Code Playgroud)
当我去掉负号时,所有负数都变成正数。
但是,如果我不将“-”转换为“0”,则会出现错误:
ValueError: could not convert string to float: '-'
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
正如@Allolz 所指出的,要摆脱,千位分隔符,请使用以下thousands参数pd.read_csv():
df= pd.read_csv("table.csv", thousands=',', encoding = 'ISO-8859-1')
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,最简单的方法是使用pd.to_numeric,它可以将所有非数字转换为NaN,然后您可以将其替换为 0:
df['value'] = pd.to_numeric(df.value,errors='coerce').fillna(0)
Run Code Online (Sandbox Code Playgroud)
例子:
df = pd.DataFrame({'value':['-','-0.5','0.5','-']})
>>> df
value
0 -
1 -0.5
2 0.5
3 -
df['value'] = pd.to_numeric(df.value,errors='coerce').fillna(0)
>>> df
value
0 0.0
1 -0.5
2 0.5
3 0.0
Run Code Online (Sandbox Code Playgroud)
但是,如果您愿意,也可以使用replace代替str.replace, 来替换完整字符串而不是子字符串:
df['value'] = df['value'].replace('-',0).astype(float)
Run Code Online (Sandbox Code Playgroud)
例子:
>>> df
value
0 -
1 -0.5
2 0.5
3 -
df['value'] = df['value'].replace('-',0).astype(float)
>>> df
value
0 0.0
1 -0.5
2 0.5
3 0.0
Run Code Online (Sandbox Code Playgroud)