熊猫根据标题读取文本文件切片列
想象一个看起来像这样的文本文件:
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