熊猫read_csv low_memory和dtype选项。 TypeError:根据规则“安全”,无法将数组从dtype('O')转换为dtype('float64')

时间:2018-11-20 14:51:49

标签: python python-3.x pandas csv dataframe

我正在尝试读取一个csv文件

df = pd.read_csv('Salaries.csv')

我有这个:

  

sys:1:DtypeWarning:列(3,4,5,6,12)具有混合类型。在导入时指定dtype选项,或将low_memory = False设置为

所以,我尝试了:

df = pd.read_csv('Salaries.csv', sep=',', dtype={
'Id': int, 
'EmployeeName': str, 
'JobTitle': str, 
'BasePay': float,
'OvertimePay': float, 
'OtherPay': float, 
'Benefits': float, 
'TotalPay': np.float64,
'TotalPayBenefits': np.float64,
'Year': np.int64,
'Notes': np.float64,
'Agency': str,
'Status': float})

现在我有了这个:

  

回溯(最近一次通话最后一次):文件“ pandas_libs \ parsers.pyx”,行1156,在   pandas._libs.parsers.TextReader._convert_tokens TypeError:无法转换   根据规则“安全”从dtype('O')到dtype('float64')的数组

我还阅读了以前的问题和官方文档,但不知道问题出在哪里。

以下是Salaries.csv中的数据示例

  

Id,EmployeeName,JobTitle,BasePay,OvertimePay,OtherPay,Benefits,TotalPay,TotalPayBenefits,年,便笺,代理商,状态

     

1,NATHANIEL FORD,总经理-大都市运输管理局,167411.18,0.0,400184.25,,567595.43,567595.43,2011,旧金山,

1 个答案:

答案 0 :(得分:-1)

您的数据框中可能有nan值。因此,当您指定dtype时,请确保已在所有列中填充了一些值,以避免该列混用dtype。

例如:

column_name
     np.nan
          1
          2
          3

在将此df写入csv之前,用df.column_name.fillna(0, inplace=True)填充此nan值。 因此,每当您使用pd.read_csv再次阅读此df时,都不会有问题。