【问题标题】:pandas load data with data type issues熊猫加载数据类型问题
【发布时间】:2016-08-27 11:50:41
【问题描述】:

这是代码、输出和原始 csv 文件数据,dtypes 都是输出的对象类型,有没有办法将每一列识别为字符串(最后一列为浮点类型)?将 Python 2.7 与 miniconda 一起使用。

代码,

import pandas as pd
sample=pd.read_csv('123.csv', sep=',',header=None)
print sample.dtypes

程序输出,

0    object
1    object
2    object
3    object

123.csv 内容,

c_a,c_b,c_c,c_d
hello,python,pandas,1.2

编辑 1,

sample = pd.read_csv('123.csv', header=None, skiprows=1,
    dtype={0:str, 1:str, 2:str, 3:str})
print sample.dtypes

0    object
1    object
2    object
3    object
dtype: object

编辑 2

sample = pd.read_csv('123.csv', header=None, skiprows=1,
    dtype={0:str, 1:str, 2:str, 3:str})
sample.columns = pd.Index(data=['c_a', 'c_b', 'c_c', 'c_d'])
sample['c_d'] = sample['c_d'].astype('float32')
print sample.dtypes

c_a     object
c_b     object
c_c     object
c_d    float32

问候, 林

【问题讨论】:

标签: python python-2.7 pandas


【解决方案1】:

您必须使用参数dtype。而且由于您不想要标题,因此您必须使用skiprows 跳过它,因为第三个元素不是浮点数。

df = pd.read_csv('123.csv', header=None, skiprows=1,
            dtype={0:str, 1:str, 2:str, 3:float})

输出是:

       0       1       2    3
0  hello  python  pandas  1.2

编辑:

要向 DataFrame 添加不同类型的标头,您可以使用:

df.columns = pd.Index(data=['c_a', 'c_b', 'c_d', 4.])

输出是:

     c_a     c_b     c_d  4.0
0  hello  python  pandas  1.2

【讨论】:

  • 但是你的第四列标题c_d 需要是一个浮点数,事实并非如此。你必须改变它。可以吗?
  • 添加到答案中。
  • 对不起,您是什么意思?这样,您可以将标题中的第四列和第四项作为浮点数,将所有其他项作为字符串。
  • 哦,好的。不,您不能将 c_d 作为浮点数。但是您可以将4.0 作为浮点数或字符串。
  • 没有问题。它们仍被视为字符串。看看这个答案。 stackoverflow.com/a/21020411/2029132
猜你喜欢
  • 2020-04-21
  • 1970-01-01
  • 2018-03-17
  • 2019-09-12
  • 2016-11-24
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2013-02-04
相关资源
最近更新 更多