【问题标题】:Data science Pandas CSV数据科学 Pandas CSV
【发布时间】:2017-03-09 06:12:04
【问题描述】:

我有一个包含 1461 个属性的 csv 文件。我想将它加载到熊猫数据框中。问题是,许多行没有尾随连续列的值。因此 pandas 由于长度不规则而导致解析错误。如何一次性输入前导列的缺失值并将csv文件加载到数据框中?

编辑1 我们可以看到数据集csv文件如下

a,b,c,d,e,f,g,h,i""" 1,2,4,5 1,0,9,8,7,6,5,4,7 1,3,5,6,7 6,7,8,8,9,4,5,3,5""" 我想要一个如下所示的熊猫数据框

"""a b c d e f g h i
   1 2 4 5 ? ? ? ? ?
   1 0 9 8 7 6 5 4 7
   1 3 5 6 7 ? ? ? ?
   6 7 8 8 9 4 5 3 5"""

NaN 代替 ?可以的

我们没有足够的逗号不等长问题。

【问题讨论】:

  • 你能告诉我们错误跟踪吗?
  • 听起来你需要在 pandas 之外对文件进行预处理。
  • 你能给一些文件样本 - 10行不规则长度吗?是否也缺少分隔符?

标签: csv pandas


【解决方案1】:

看来您可以使用read_csv 中的参数names 来作为range 的列名(如果属性是列):

import pandas as pd
from pandas.compat import StringIO

temp=u"""
a,v
c,v,f,r
b,g
y"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
#in real data change 4 to 1461
names = range(4)
df = pd.read_csv(StringIO(temp), names=names)
print (df)
   0    1    2    3
0  a    v  NaN  NaN
1  c    v    f    r
2  b    g  NaN  NaN
3  y  NaN  NaN  NaN

编辑:

temp=u"""a,b,c,d,e,f,g,h,i
1,2,4,5
1,0,9,8,7,6,5,4,7
1,3,5,6,7
6,7,8,8,9,4,5,3,5"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp))
print (df)
   a  b  c  d    e    f    g    h    i
0  1  2  4  5  NaN  NaN  NaN  NaN  NaN
1  1  0  9  8  7.0  6.0  5.0  4.0  7.0
2  1  3  5  6  7.0  NaN  NaN  NaN  NaN
3  6  7  8  8  9.0  4.0  5.0  3.0  5.0

【讨论】:

  • 据我了解他的问题,他是在谈论领先的空列,而不是尾随的列。我认为对于领先者,他需要正常读取文件,计算分隔符,然后将适当数量的分隔符附加到每行的开头。
  • @Khris - 嗯,谢谢你的评论。但似乎缺少一些分隔符,因此值无法匹配正确的列并出现解析错误。但没有数据就很难回答。
  • 错误消失了,但它将所有值都视为 NaN 并且不会导入所有行。并且数据是数字我是否将其转换为数字。对不起,我的意思是尾随。抱歉浮动没问题。我想要的只是不要得到 NaN 的数字。您的解决方案是正确的,但它似乎适用于字符串,我们如何使其适用于浮点数?
  • read_csv() 可以选择修改 nan 值。
  • @Khris 是的,但原始 csv 文件只有空白值。通常我们有'?来表示缺失值。数据集只有空白,没有任何内容表示缺失值。
猜你喜欢
  • 2014-05-24
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多