如果任何行值为空,pandas read_csv会将整数解释为浮点型

时间:2018-08-14 16:15:53

标签: python pandas

我有一个从网站格式化的大型csv文件。它有超过60列。如果列中任何应解释为整数的值都是空值,则该列中的每个值都将解释为float64。

是否可以将其默认设置为int64并避免为每一列定义数据类型的繁琐任务?

这是一个示例csv源文件,没有空格:

FirstNumber, SecondNumber, Name, Price, code
3,2,"Robin",$24.50,1
4,5,"Robin",$24.50,6
7,8,"Robin",$24.50,9
10,11,"Robin",$24.50,12

以下是结果:

>>> df_test = pd.read_csv('test_csv.csv')
>>> df_test
   FirstNumber   SecondNumber   Name   Price   code
0            3              2  Robin  $24.50      1
1            4              5  Robin  $24.50      6
2            7              8  Robin  $24.50      9
3           10             11  Robin  $24.50     12
>>> df_test.dtypes
FirstNumber       int64
 SecondNumber     int64
 Name            object
 Price           object
 code             int64
dtype: object

如果我修改csv文件,使某些行具有空数字列值,则任何具有NaN的列的该列中的每个值默认为float64。下面提供了两个示例:

CVS源数据示例1

FirstNumber, SecondNumber, Name, Price, code
3,2,"Robin",$24.50,1
,5,"Robin",$24.50,6
7,8,"Robin",$24.50,9
10,11,"Robin",$24.50,

数据框填充结果。 FirstNumber和代码列转换为float64:

>>> df_test = pd.read_csv('test_csv.csv')
>>> df_test
   FirstNumber   SecondNumber   Name   Price   code
0        3.000              2  Robin  $24.50  1.000
1          nan              5  Robin  $24.50  6.000
2        7.000              8  Robin  $24.50  9.000
3       10.000             11  Robin  $24.50    nan
>>> df_test.dtypes
FirstNumber      float64
 SecondNumber      int64
 Name             object
 Price            object
 code            float64
dtype: object


**Example 2 of csv source data**  

在此示例中,SecondNumber和Price在某处具有空值。

FirstNumber, SecondNumber, Name, Price, code
3,2,"Robin",$24.50,1
4,,"Robin",$24.50,6
7,8,"Robin",,9
10,11,"Robin",$24.50,12

这是输出。 SecondNumber如预期那样强制转换为float64,Price仍强制转换为对象:

>>> df_test
   FirstNumber   SecondNumber   Name   Price   code
0            3          2.000  Robin  $24.50      1
1            4            nan  Robin  $24.50      6
2            7          8.000  Robin     NaN      9
3           10         11.000  Robin  $24.50     12
>>> df_test.dtypes
FirstNumber        int64
 SecondNumber    float64
 Name             object
 Price            object
 code              int64
dtype: object

为什么当csv文件中特定列中的一个值为空时,一个数据类型(int64更改为float64)会改变而另一个(对象)没有更改吗?

在这种情况下是否有一种优雅的方法告诉大熊猫保留int64类型?

0 个答案:

没有答案