我已将CSV文件导入为Pandas数据帧。当我运行df.dtypes
时,我将大多数列作为“对象”,这对于获取图表的Bokeh来说是无用的。
int
,将另一列更改为date
,其余列更改为字符串。答案 0 :(得分:3)
我认为read_csv
中的datetime需要parse_dates
参数。
如果您有int
列但未获得int64
dtype
,我认为有些strings
可能是empty strings
,因为read_csv
是自动的施放dtypes
。
然后需要按to_numeric
将错误数据转换为NaN
- 但要获取float
列,因为NaN
具有float
类型。因此,需要将NaN
替换为某个int(例如0
),然后转换为int
:
df['col_int'] = pd.to_numeric(df['col_int'], errors='coerce').fillna(0).astype(int)
样品:
import pandas as pd
from pandas.compat import StringIO
temp=u"""a;b;c;d
A;2015-01-01;3;e
S;2015-01-03;4;r
D;2015-01-05;5r;t"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep=";", parse_dates=[1])
print (df)
a b c d
0 A 2015-01-01 3 e
1 S 2015-01-03 4 r
2 D 2015-01-05 5r t
print (df.dtypes)
a object
b datetime64[ns]
c object
d object
dtype: object
df['c'] = pd.to_numeric(df['c'], errors='coerce').fillna(0).astype(int)
print (df)
a b c d
0 A 2015-01-01 3 e
1 S 2015-01-03 4 r
2 D 2015-01-05 0 t
print (df.dtypes)
a object
b datetime64[ns]
c int32
d object
dtype: object
对于更改dtypes
需要dtype
参数:
temp=u"""a;b;c;d
A;10;3;e
S;2;4;r
D;6;1;t"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep=";", dtype={'b':str, 'c':float})
print (df)
a b c d
0 A 10 3.0 e
1 S 2 4.0 r
2 D 6 1.0 t
print (df.dtypes)
a object
b object
c float64
d object
dtype: object
答案 1 :(得分:0)
在阅读csv文件时:
在pandas中的read_csv中使用dtype或converters属性
import pandas as pd
import numpy as np
df = pd.read_csv('data.csv',dtypes = {'a':float64,'b':int32},headers=None)
此处,类型将自动读取为您指定的数据类型。
阅读完csv文件后:
使用astype函数更改列类型。
检查此代码。 考虑你有两列
df[['a', 'b']] = df[['a', 'b']].astype(float)
这样做的好处是可以一次更改多个列的类型。
答案 2 :(得分:0)
使用 one-hot 编码。
这里数据类型从对象转换为类别,然后转换为 int64。 但是这种方法用于分类数据。
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
dataframe = pd.read_csv('path//filename.csv')
dataframe ["attribute"] = dataframe ["attribute"].astype('category')
dataframe ["attribute_cat"] = dataframe ["attribute"].cat.codes