pandas 读取 csv 形成 dataframe,结果类型都是 object,怎么才能复原到原始的所需要数据类型呢?

2017-11-20 02:37:02 +08:00
 jahan

df = pd.read_csv('text.csv', dtype={'code':str,‘ Sector ’:str,‘ price ’:decimal ??} 其中有一列数据为金额,所以想用 decimal,但是总是出错,请教大神们,这个怎么处理? 还有一个 Sector 列中想保存不包含某个字符串的行(对应 excel 中的筛选动作),这个又有什么简单明了的方法呢? 谢谢。

16126 次点击
所在节点    Python
4 条回复
chy373180
2017-11-20 10:28:05 +08:00
看下 dtype 的类型,你设的这几种都没有
object -- 代表了字符串类型
int -- 代表了整型
float -- 代表了浮点数类型
datetime -- 代表了时间类型
bool -- 代表了布尔类型

筛选
df = df[df['Sector'] != str_a]

自己多谷歌吧
ipwx
2017-11-20 10:33:13 +08:00
多看文档。

pandas 的 dtype 对应 NumPy 的 dtype。NumPy 的 dtype 有两大类,NumPy 的 C 扩展库提供的 value type,还有 Python 自身的对象类型。对于 value type,NumPy 有 C 扩展库保证运算速度。

所以除了 1L 列出来的那些类型,其他都会变成 object。
jahan
2017-11-20 14:15:16 +08:00
@chy373180 非常感谢。df = df[df['Sector'] != str_a]是保留所有不是 str_a 的吧,所有不包含 str_a 的是不是应该 df[str_a not in df[‘ Sector ’]] ?
@ipwx 文档的话,是 pandas 的文档吗?马上开始,
python 太好用了简直。
hjq98765
2017-11-20 15:19:14 +08:00
可以把文件先读进来再试着转小数,看看这一列的 dtype 是不是 float
df['price'] = pd.to_numeric(df['price'], errors='ignore')

要是那一列的 dtype 还是 object,那就 df['price'].value_counts()一下看看到底是什么值不是数字

----------------------------------------

也有一种可能,是 csv 文件里的数据都加了双引号,导致直接读成 float 报错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/407775

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX