python - 将仅包含行的连续文本文件解析为熊猫数据框
问题描述
我有一个包含重复行的文本文件,我想转换为数据框。
10/21/2019
abcdef
100.00
10/22/2019
ghijk
120.00
有一个明显的模式,我希望数据框看起来像这样:
Data | Description | Amount
10/21/2019 | abcdef | 100.00
10/22/2019 | ghijk | 120.00
这是怎么做到的?
谢谢。
解决方案
一点正则表达式来提取细节,然后向前填充前两列并删除空值
pattern = r"(?P<Date>\d{2}/\d{2}/\d{4})|(?P<Description>[a-z]+)|(?P<Amount>\d{1,}\.00)"
res = (df1.text.str.extract(pattern)
.assign(Date = lambda x: x.Date.ffill(),
Description = lambda x: x.Description.ffill()
)
.dropna(how='any')
)
res
Date Description Amount
2 10/21/2019 abcdef 100.00
5 10/22/2019 ghijk 120.00
如果你不关心正则表达式,并且格式是不变的,那么我们可以用 numpy 重塑数据并创建一个新的数据框。
#reshape the data
#thanks to @Chester
#removes unnecessary computation
res = np.reshape(df1.to_numpy(),(-1,3))
#create new dataframe
pd.DataFrame(res,columns=['Date','Description','Amount'])
Date Description Amount
0 10/21/2019 abcdef 100.00
1 10/22/2019 ghijk 120.00
推荐阅读
- awk - 打印第二列的数据
- java - 如何在没有 IndexOutOfRangeException 的情况下正确使用 Fork/Join 框架?
- javascript - 为什么`bind`的返回函数没有`prototype`属性?
- javascript - 与返回函数(咖喱)的处理函数反应 - 使用它有什么好处?
- c++ - 编译 Matconvnet R2019a 时出错,使用 mex 时出错
- opengl - 通过单个片段着色器将两个纹理渲染到两个单独的对象上
- javascript - 为什么 JS Regexp.exec 返回一个包含比预期更多元素的数组?
- dart-html - 如何在 Dart (html) 中打开带有内容的新浏览器窗口
- css - 样式化组件 - 如何为作为道具传递的组件设置样式?
- tensorflow.js - tensorflow.js 中计算直方图的最佳方法