Python Pandas 中的 read_fwf 函数需要您的帮助。

3

文本文件的示例如下图片 enter image description here

根据文件,在单词“chapter”之后,数据的方向将会改变。换句话说,阅读方向会从水平变为垂直。

为了解决这个大问题,我尝试使用pandas模块中的read_fwf函数进行处理,但是失败了。

linefwf = pandas.read_fwf('File.txt', widths=[33,33,33], header=None, nwors = 3)

章节(Chapter)、标题(Title)、任务(Assignment)之间的间隔为33。

但是命令(linefwf)会打印所有包含水平分类(例如标题、日期、预约等)以及空行的页面行。

请问如何只导出垂直数据?


你能发布原始输入数据而不是图像吗? - EdChum
1个回答

8
让我猜一下:您想将此表格转换为列(即“垂直类别”),忽略其他列?
我没有您的精确文本,所以我进行了估算。我的列宽与您的不同([11,21,31]),并且我省略了nwors参数(您可能想使用nrows,但在这种情况下它是多余的)。虽然列规范不是很精确,但几秒钟的摆弄让我得到了一个可用的DataFrame
这在读入数据集方面是相当典型的。让我们稍微清理一下,给它真实的列名,并且去掉分隔行。
df.columns = list(df.loc[0])
df = df.ix[2:6]

这样做会产生以下影响: enter image description here 这将使 df 变为: enter image description here 我们不需要重新索引行。假设我们想要某一列的值,我们可以通过索引来获取:
df['Chapter']

产出:

2    1-1
3    1-2
4    1-3
5    1-4
6    1-5
Name: Chapter, dtype: object

或者如果您想要将其作为本地Python list 而不是 pandas.Series:

list(df['Chapter'])

产生:

['1-1', '1-2', '1-3', '1-4', '1-5']

哦我的熊猫啊!!!我明白了read_fwf在你的回答后将文本文件更改为DataFrame!!在我的韩国书中,没有解释Ix或lox方法,但是,在您的可视化解释之后,我可以轻松地理解pandas!!非常感谢您!!! - seminj
.loc 的简单理解是它是数据的“位置”。它允许您使用不同于 Python 标准整数索引的索引(例如行名称)。.ix 是实际基于整数的索引。我混合和匹配了这两种访问方式,这是非常常见的。通过 索引教程 和试错需要花费很多时间才能真正“理解” pandas 选择。 - Jonathan Eunice
非常抱歉我晚才标记您的答案为正确。完成这项工作后,我会再次尝试详细学习有关Pandas的知识(实际上,我的专业是管理/金融)。我认为Python为用户提供了无限的工具。您的回答对我非常有帮助。谢谢! - seminj
我可以再问一个问题吗?我的目的是通过从原始总数据帧中取出数据帧(.ix),通过concat或append构建其他新数据帧。链接。运行此文件后,代码中的“frame”为空。我应该找另一种方法吗? - seminj
我不确定我完全理解这个问题。但是,许多pandas操作会创建数据的副本。在这种情况下,df = df.ix [2:6]确实替换了现有数据。但你也可以说dnew = df.ix [2:6]。然后你就会得到只有所需行的dnewdf将完全保持原样。.ix不是破坏性的。一些操作(例如.shift())是破坏性的,但索引几乎从不修改现有数据。 - Jonathan Eunice
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接