假设我在数据框中有一个列,其中包含一些数字和一些非数字
>> df['foo']
0 0.0
1 103.8
2 751.1
3 0.0
4 0.0
5 -
6 -
7 0.0
8 -
9 0.0
Name: foo, Length: 9, dtype: object
Run Code Online (Sandbox Code Playgroud)
如何将此列转换为np.float,并将其他所有不浮动的列转换为NaN?
当我尝试:
>> df['foo'].astype(np.float)
Run Code Online (Sandbox Code Playgroud)
要么
>> df['foo'].apply(np.float)
Run Code Online (Sandbox Code Playgroud)
我明白了 ValueError: could not convert string to float: -
在使用read_csvPandas时,如果我希望将给定列转换为类型,则格式错误的值将中断整个操作,而不会显示有问题的值.
例如,运行类似于:
import pandas as pd
import numpy as np
df = pd.read_csv('my.csv', dtype={ 'my_column': np.int64 })
Run Code Online (Sandbox Code Playgroud)
将导致以错误结束的堆栈跟踪:
ValueError: cannot safely convert passed user dtype of <i8 for object dtyped data in column ...
Run Code Online (Sandbox Code Playgroud)
如果我有错误消息中的行号或违规值,我可以将它添加到已知NaN值列表中,但这样我就无能为力了.
有没有办法告诉解析器忽略失败并np.nan在这种情况下返回?
Post Scriptum:有趣的是,在解析后没有任何类型的建议(没有dtype参数),d['my_column'].value_counts()似乎推断出dtype正确并np.nan自动正确放置,即使dtype系列的实际是一般的object,几乎每个绘图和统计操作都会失败
可能这是一个老问题,我在下面找到了类似的问题,但我仍然可以在输出文件中看到科学记数法。
我试图合并set_option和df.apply(pd.to_numeric, args=('coerce',))等下面,而没有工作我的代码。
df = pd.read_csv(Input)
dfNew = df[['co_A','co_B','co_C']]
# I firstly select columns from df then would like to convert scientific notation to decimal type in my output file.
dfNew.to_csv(Output, index = False, sep = '\t')
Run Code Online (Sandbox Code Playgroud)
我仍然可以在输出文件中看到科学记数法。任何人都可以帮忙吗?
co_A co_B co_C
167 0.0 59.6
168 0.0 60.6
191 8e-09 72.6
197 -4.7718e-06 12.3
197 0.0 92.4
198 0.0 39.5
Run Code Online (Sandbox Code Playgroud)