Python 根据标题读取文本文件切片列
设想一个如下所示的文本文件:Python 根据标题读取文本文件切片列,python,pandas,text,Python,Pandas,Text,设想一个如下所示的文本文件: Places Person Number Comments bar anastasia 75 very lazy home jimmy nothing to say beach 2 将第一行视为包含我希望用于数据帧的列名称的标题。你可以看到有空的单元格。还有一列包含带空格的字符串。该文件中
Places Person Number Comments
bar anastasia 75 very lazy
home jimmy nothing to say
beach 2
将第一行视为包含我希望用于数据帧的列名称的标题。你可以看到有空的单元格。还有一列包含带空格的字符串。该文件中有一个可读模式,列之间至少有2个空格,从列名的端点到上一个列名的端点,每列的信息基本上可以是红色的。这一点没有含糊不清之处
如果我这样做
df = pd.read_csv('text_file.txt')
df = pd.read_csv('text_file.txt', delim_whitespace = True)
df = pd.read_csv('text_file.txt', sep = '\s{2,}', engine = 'python')
我将得到一个3 x 1的数据框,其中唯一的一列被称为“Places Person Number Comments”
。因此,它无法理解表格格式
如果我这样做
df = pd.read_csv('text_file.txt')
df = pd.read_csv('text_file.txt', delim_whitespace = True)
df = pd.read_csv('text_file.txt', sep = '\s{2,}', engine = 'python')
它将创建大量的列,但无法理解注释
中值中的空格,并将注释拆分并发送到不同的单元格,如下所示:
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')
df = pd.read_csv('text_file.txt', delim_whitespace = True)
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中有没有一种优雅的方法可以做到这一点?您可以使用它将文件(一个具有固定宽度格式行的文件)读入数据帧
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