python大量使用ID的问题

时间:2018-07-31 18:00:19

标签: python-3.x types int floating-accuracy data-integrity

我正在整理一个脚本来分析活动并报告。我正在python中构建它,以便下次轻松实现。我遇到了与数据中包含的ID有关的问题,它们本质上确实是很大的数字(没有字符串,没有字符)。当从excel中提取数据时,我得到这样的浮点数(7.000000e + 16),而实际上却是这样的整数(70000000001034570)。我的问题是,我丢失了大量数据,并且各种唯一ID都转换为几个不同的float。我意识到这可能与read_csv函数有关,因为所有这些都来自.csv。我不确定转换为字符串会给我带来与浮点数相同的结果,只是将其转换为字符串数据类型会给我带来什么结果,转换为int会给我带来科学计数法的文字结果(即70000000000000000)。是否有我可以将其存储为的数据类型或可以用于保留数据的方法?我将不得不在ID的后面合并从查询中提取的数据,因此理想情况下,我想找到一个可以保留它们的数据类型。下面的几行代码可以运行,但是由于我描述的问题,返回的行很少。

`high_lvl_df = pd.read_csv(r"mycsv.csv")
 full_df = low_lvl_df.merge(right=high_lvl_df, on='fact', how='outer')
 full_df.to_csv(r'fullmycsv.csv')`

1 个答案:

答案 0 :(得分:0)

这可能与缺少值有关。

考虑此CSV:

70000000001034570,2.                                                               
70000000001034571,3.

然后:

>>> pandas.read_csv('asdf.csv', header=None)     
                   0    1
0  70000000001034570  2.0
1  70000000001034571  3.0

为您带来预期的结果。

与:

70000000001034570,2.
,1.                                                                                
70000000001034571,3.

您得到:

>>> pandas.read_csv('asdf.csv', header=None)
              0    1
0  7.000000e+16  2.0
1           NaN  2.0
2  7.000000e+16  3.0

这是因为整数没有NaN值,而浮点数确实具有该值作为有效值。因此,Pandas推断列类型是浮点型,而不是整数。

您可以使用pandas.read_csv()的{​​{1}}参数来强制输入字符串,例如:

dtype

根据Pandas' documentation

  

dtype :类型名称或列的字典->类型,可选

     

数据或列的数据类型。例如。 {“ a”:np.float64,“ b”:np.int32,“ c”:“ Int64”}将str或object与合适的na_values设置一起使用,以保留而不解释dtype。如果指定了转换器,则会将它们应用于dtype转换。