Python 3.x “如何更改数据类型”;“对象”;导入CSV后是否在数据框中?
我已经导入了一个CSV文件作为数据帧。当我运行Python 3.x “如何更改数据类型”;“对象”;导入CSV后是否在数据框中?,python-3.x,pandas,Python 3.x,Pandas,我已经导入了一个CSV文件作为数据帧。当我运行df.dtypes时,我得到的大多数列都是“object”,这对于图表中的Bokeh是无用的 我需要将一列更改为int,另一列更改为date,其余更改为strings 我只在导入数据类型后才能看到它。您建议在导入期间(如何?)或导入之后更改它吗 我认为datetime需要解析中的日期参数 如果您有int列,但没有得到int64dtype,我想可能有一些字符串可能是空字符串,因为读取csv自动转换dtypes 然后需要通过-将坏数据转换为NaN,但获取
df.dtypes
时,我得到的大多数列都是“object”,这对于图表中的Bokeh是无用的
int
,另一列更改为date
,其余更改为strings我认为datetime需要
解析中的日期
参数
如果您有int
列,但没有得到int64
dtype
,我想可能有一些字符串可能是空字符串
,因为读取csv
自动转换dtypes
然后需要通过-将坏数据转换为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
在读取csv文件期间:
在pandas中的read_csv中使用数据类型或转换器属性
将熊猫作为pd导入
将numpy作为np导入
df=pd.read\u csv('data.csv',dtypes={'a':float64,'b':int32},headers=None)
在这里,类型将被自动读取为您指定的数据类型
读取csv文件后:
使用astype函数更改列类型
检查此代码。
假设你有两列
df[['a',b']]=df[[a',b']].astype(float)
这样做的好处是可以一次更改多个列的类型