Python中pandas读取csv形成dataframe,结果类型都是object,怎么才能复原到原始的所需要数据类型呢?
df = pd.read_csv('text.csv', dtype={'code':str,‘ Sector ’:str,‘ price ’:decimal ??} 其中有一列数据为金额,所以想用 decimal,但是总是出错,请教大神们,这个怎么处理? 还有一个 Sector 列中想保存不包含某个字符串的行(对应 excel 中的筛选动作),这个又有什么简单明了的方法呢? 谢谢。
Python中pandas读取csv形成dataframe,结果类型都是object,怎么才能复原到原始的所需要数据类型呢?
看下 dtype 的类型,你设的这几种都没有
object – 代表了字符串类型
int – 代表了整型
float – 代表了浮点数类型
datetime – 代表了时间类型
bool – 代表了布尔类型
筛选
df = df[df[‘Sector’] != str_a]
自己多谷歌吧
用dtype参数或者读完后用astype转换。
最简单的方法是在pd.read_csv()的时候直接指定每列的类型:
import pandas as pd
# 方法1:用dtype参数直接指定
df = pd.read_csv('your_file.csv', dtype={
'int_column': 'int32',
'float_column': 'float64',
'string_column': 'str'
})
如果已经读进来了,可以用astype()转换:
# 方法2:读完后转换
df = pd.read_csv('your_file.csv')
df['int_column'] = df['int_column'].astype('int32')
df['float_column'] = df['float_column'].astype('float64')
还有个更省事的办法是用converters参数,可以写个函数来处理:
# 方法3:用converters自定义转换
def convert_column(value):
try:
return int(value)
except:
return value
df = pd.read_csv('your_file.csv', converters={'int_column': convert_column})
如果数据里有缺失值或者奇怪的空格,pandas会默认用object类型。这时候可以先清理下数据,或者用pd.to_numeric()配合errors='coerce':
# 处理带缺失值的数值列
df['numeric_column'] = pd.to_numeric(df['numeric_column'], errors='coerce')
用infer_objects()也能让pandas自己猜一下类型:
df = df.infer_objects()
总之就是读的时候指定类型最靠谱,不然读完了再转也行。
总结:读文件时用dtype参数最直接。
多看文档。
pandas 的 dtype 对应 NumPy 的 dtype。NumPy 的 dtype 有两大类,NumPy 的 C 扩展库提供的 value type,还有 Python 自身的对象类型。对于 value type,NumPy 有 C 扩展库保证运算速度。
所以除了 1L 列出来的那些类型,其他都会变成 object。
非常感谢。df = df[df[‘Sector’] != str_a]是保留所有不是 str_a 的吧,所有不包含 str_a 的是不是应该 df[str_a not in df[‘ Sector ’]] ?
文档的话,是 pandas 的文档吗?马上开始,
python 太好用了简直。
可以把文件先读进来再试着转小数,看看这一列的 dtype 是不是 float
df[‘price’] = pd.to_numeric(df[‘price’], errors=‘ignore’)
要是那一列的 dtype 还是 object,那就 df[‘price’].value_counts()一下看看到底是什么值不是数字
----------------------------------------
也有一种可能,是 csv 文件里的数据都加了双引号,导致直接读成 float 报错

