熊猫根据标题读取文本文件切片列

想象一个看起来像这样的文本文件:

Places       Person  Number         Comments
   bar    anastasia      75        very lazy
  home        jimmy           nothing to say
 beach                    2                 

将第一行视为包含我想要用于 Pandas 数据框的列名称的标题。您可以看到有空单元格。并且有一列包含带空格的字符串。这个文件有一个可读的模式,列之间至少有2个空格隔开,每列的信息基本上可以从列名的终点到上一个列名的终点是红色的。这没有歧义。


如果我做

df = pd.read_csv('text_file.txt')

我将得到一个 3 x 1 的数据框,其中唯一的列被调用"Places Person Number Comments"。所以它无法理解表格格式。


如果我做

df = pd.read_csv('text_file.txt', delim_whitespace = True)

它将创建大量的列,但将无法理解值中的空格Comments,并将拆分注释并将其发送到不同的单元格,如下所示:

          Places   Person Number Comments
bar    anastasia       75   very     lazy
home       jimmy  nothing     to      say
beach          2      NaN    NaN      NaN

如果我做

df = pd.read_csv('text_file.txt', sep = 's{2,}', engine = 'python')

它将理解,只有当有两个或更多空间时,才可以将其视为另一列的一部分。所以这是正确的。但它无法理解有空单元格,并且会错误地将单元格从一列移动到另一列。

  Places     Person          Number   Comments
0    bar  anastasia              75  very lazy
1   home      jimmy  nothing to say       None
2  beach          2            None       None

此时我不知道该怎么办。在 Pandas 中是否有一种优雅的方法来做到这一点?

回答

您可以使用pd.read_fwf()将您的文件(固定宽度格式化行的文件)读入 DataFrame。

df = pd.read_fwf('text_file.txt')

演示

我使用 StringIO 作为演示。您可以使用实际文件名作为函数调用的参数。

text = """
Places       Person  Number         Comments
   bar    anastasia      75        very lazy
  home        jimmy           nothing to say
 beach                    2                 
"""

from io import StringIO
df = pd.read_fwf(StringIO(text))

print(df)

  Places     Person  Number        Comments
0    bar  anastasia    75.0       very lazy
1   home      jimmy     NaN  nothing to say
2  beach        NaN     2.0             NaN


以上是熊猫根据标题读取文本文件切片列的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>