使用NaN匹配数据类型高效读取CSV

2024-05-13 20:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图读入一个大数据帧,但我不断得到错误:DtypeWarning: Columns (3,4,5,12,13,14,17,18,19,22,23,24) have mixed types. Specify dtype option on import or set low_memory=False.

假设这是一个非常简化的版本,即我的数据帧的外观:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['alice', 'bob', np.nan, '--', 'jeff', np.nan],
                   'B': ['JFK', np.nan, 'JFK', 'JFK', 'JFK', 'JFK'],
                   'C': [.25, 0.5, np.nan, 4, 12.2, 14.4]})


    A         B        C
0   alice   JFK     0.25
1   bob     NaN     0.50
2   NaN     JFK     NaN
3   --      JFK     4.00
4   jeff    JFK     12.20
5   NaN     JFK     14.40

据我所知,NaN是一种浮点数据类型

在A列中,在保持列中的相同数据类型的同时,表示空白值的最佳方法是什么?我想将“---”也更改为空值。类似地,在B列中,NaN(浮点)与JFK(字符串)混合。解决这个问题的最好办法是什么

最后我想做pd.read_csv(,dtype={'A':str,'B':str,'C':np.int32})之类的事情。如果我在这里也错了,请纠正我

编辑:

test = pd.read_csv('test.csv', na_values='--', dtype = {'A':str, 'B': str, 'C':np.float64})

in: test
out:    
    A        B       C
0   alice   JFK     0.25
1   bob     NaN     0.50
2   NaN     JFK     NaN
3   NaN     JFK     4.00
4   jeff    JFK     12.20
5   NaN     JFK     14.40


type(test.iloc[2]['A'])    # float
type(test.iloc[1]['A'])    # string

这些是不同类型的可以吗?有没有办法把两者都变成一根线?或者甚至不建议这样做


Tags: csv数据testimportasnpnanpd