列数据类型异常

时间:2016-04-23 15:19:39

标签: python pandas dataframe

是否有更有说服力/更有效的方式来执行以下操作。使用pd.read函数我导入了很多文件。对于大多数这些数据框中的所有数据类型都希望是一种类型即对象,但是有限数量将是不同的类型,即float64或datetime。有没有办法导入除指定之外的所有对象。目前我正在接近如下;

df = pd.read_csv('filepath', dtype=object)

然后;

df['column_with_easting&northing'] = pd.to_numeric(df['column_with_easting&northing'])
df['column_with_dd-mm-yyyy] = pd.to_datetime(df['column_with_column_with_dd-mm-yyyy'])

我想知道我能做的事情就像所有列都是对象,除了日期和数字。如果我使用

df = df = pd.read_csv(StringIO(data), dtype={'column_with_dd-mm-yyyy': object, 'column_with_easting&northing': np.float64})

然后,当我知道数据是对象时,pandas会尝试推断剩余的列类型,从而为我提供了对象和浮点数的混合。

1 个答案:

答案 0 :(得分:0)

考虑在列范围内使用date_parserconvertersread_csv的参数)的组合。下面的示例使用csv,其中前四列是 dd-mmm-yyyy 格式的日期,最后3列是字符串。记录范围允许每隔一列进行步进:range(0,4,2)

dateparse = lambda x: pd.datetime.strptime(x, '%d-%b-%Y')

df = pd.read_csv('data.csv',                 
                 parse_dates=list(range(4)), date_parser=dateparse,
                 converters={i:str for i in range(4,7)})