Python 如何在Int64上读取熊猫中的_csv而不丢失精度?
假设我们正在尝试读取此csv文件Python 如何在Int64上读取熊猫中的_csv而不丢失精度?,python,pandas,dataframe,Python,Pandas,Dataframe,假设我们正在尝试读取此csv文件 导入io 作为pd进口熊猫 未处理的文件内容=“名称、印象、花费” 鲍勃,32,76岁 查理,16,48岁 迈克,, Joao,16728922536906298“ 熊猫\u数据类型={ “名称”:“字符串”, “印象”:“Int64”, “花费美元”:“浮动”, } 如果我们正常读取它,pandas会转换16728922536906298->float->Int,导致它失去精度,变成1672892253690304 df = pd.read_csv(io.S
导入io
作为pd进口熊猫
未处理的文件内容=“名称、印象、花费”
鲍勃,32,76岁
查理,16,48岁
迈克,,
Joao,16728922536906298“
熊猫\u数据类型={
“名称”:“字符串”,
“印象”:“Int64”,
“花费美元”:“浮动”,
}
如果我们正常读取它,pandas会转换16728922536906298
->float->Int,导致它失去精度,变成1672892253690304
df = pd.read_csv(io.StringIO(unprocessed_file_contents), dtype=pandas_dtypes)
assert df.iloc[3,1] == 167289225369306298 # this fails (and becomes 167289225369306304)
如果使用此方法读取,第一个断言将通过,但第二个断言失败
df = pd.read_csv(io.StringIO(unprocessed_file_contents), header=None, skiprows=1, dtype=pandas_dtypes)
assert df.iloc[3,1] == 167289225369306298 # passes (because it compares it as a pandas type)
assert int(df.iloc[3,1]) == 167289225369306298 # fails (and becomes 167289225369306304)
在
读取csv
的过程中,如何让pandas将167289225369306298
作为一个整数?这个问题似乎是由列中的NaN或空值引起的
通过消除这些空值,它开始按预期工作
import io
import pandas as pd
unprocessed_file_contents = """name,impressions,spend_usd
Bob,32,76
Charlie,16,48
Mike,42324,
Joao,167289225369306298,"""
pandas_dtypes = {
"name": "string",
"impressions": "Int64",
"spend_usd": "float",
}
df = pd.read_csv(io.StringIO(unprocessed_file_contents), dtype=pandas_dtypes)
assert df.iloc[3,1] == 167289225369306298 # passes
还有一个关于这个的bug报告
不幸的是,我们仍然需要包含空数字。。。。