我有一个从网站格式化的大型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类型?