我正在尝试将一个非常混乱的文本文件加载到Python/Pandas中。以下是文件中数据外观的示例
数据分析v2.2.1 -价格活动数据-票价1.txt数据: 2017-12-01 02:13:00UTC- 2017-12-31 18:12:00 UTCGenerated: 2018-01-16 19:44:53 UTCticker日期描述行业价格-R T1-数量V-差值价格-差值数量-增量中心-日期中心-时间中心-时区票务1 2017-12-01 02:13:00公司N/A N/A 0.0 1 1.0 0.01.0 2017-11-30 21:13:00 US/EasternTicker1 2017-12-01 06:27:00 Company Inc. N/A N/A 0.0 1 1.0 0.0 1.0 2017-12- 01 :27:00 US/东部
我已经尝试过使用分隔符“”的Pandas pd.read_csv函数。然而,由于最初的说明,它看起来不能正常工作。
import pandas as pd
data = pd.read_csv('Ticker1.txt', sep=" ",
names = ['ticker', 'date', 'description', 'sector', 'industry', 'raw-s', 's-volume', 's-dispersion', 'raw-s-delta', 'volume-delta', 'center-date', 'center-time', 'center-time-zone'])文件数据:
数据分析v2.2.1 -价格活动数据-票价1.txt数据: 2017-12-01 02:13:00UTC- 2017-12-31 18:12:00 UTCGenerated: 2018-01-16 19:44:53 UTCticker日期描述行业价格-R T1-数量V-差值价格-差值数量-增量中心-日期中心-时间中心-时区票务1 2017-12-01 02:13:00公司N/A N/A 0.0 1 1.0 0.01.0 2017-11-30 21:13:00 US/EasternTicker1 2017-12-01 06:27:00 Company Inc. N/A N/A 0.0 1 1.0 0.0 1.0 2017-12- 01 :27:00 US/东部
预期结果:
初始注释仅供参考,应忽略不计。
“数据分析v2.2.1 -价格活动数据-票价1.txt数据: 2017-12-01 02:13:00utc- 2017-12-31 18:12:00 UTCGenerated: 2018-01-16 19:44:53 UTC”
列:
‘股票行情’,‘日期’,‘描述’,‘行业’,‘价格-R’,‘T1-量’,‘V-离差’,‘价格-增量’,‘量-增量’,‘中心日期’,‘中心时间’,‘中心时区’
数据:
Ticker1 2017-12-01 02:13:00公司N/A N/A 0.0 1 1.0 0.0 1.0 2017-11-30 21:13:00美国/东部
Ticker1 2017-12-01 06:27:00公司N/A N/A 0.0 1 1.0 0.0 1.0 2017-12-01 01:27:00美国/东部
发布于 2019-10-07 23:08:21
pandas read_csv()有许多内置组件(如skiprows)来处理这样的问题。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
发布于 2019-10-07 23:36:17
假设你有3行,你想跳过:
import pandas as pd
labels_read = ['ticker','date','d0','d1','sector','industry','Price-R','T1-volume','V-dispersion','Price-delta','volume-delta','center-date','center-time','center-time-zone']
labels = ['ticker','date','description','sector','industry','Price-R','T1-volume','V-dispersion','Price-delta','volume-delta','center-date','center-time','center-time-zone']
df = pd.read_csv("test1.csv",sep=" ",skiprows=3, names=labels_read)
df['description'] = df['d0'].str.cat(df['d1'],sep=" ")
df = df[labels]发布于 2019-10-07 23:55:13
感谢@PySeeker和@jtwilson的回答。感谢您的快速回复。Skiprows参数对我很有帮助。然而,我不得不使用一些技巧来决定行号。这个技巧可能并不有效,但我能够理解这一点,因此我使用了它。
""" Need to print first few lines to understand where the header starts"""
lines = []
for line in pd.read_csv('Ticker1.txt', encoding='utf-8', header=None, chunksize=1):
lines.append(line.iloc[0,0])
print(lines[0:4])
"""
1. Its a tab delimiter file
2. Looks like first 4 lines need to be ignored
"""
import pandas as pd
data = pd.read_csv('Ticker1.txt', sep="\t", skiprows = 4)
data.columns = ['ticker', 'date', 'description', 'sector', 'industry', 'raw-s', 's-volume', 's-dispersion', 'raw-s-delta', 'volume-delta', 'center-date', 'center-time', 'center-time-zone']
data.head()https://stackoverflow.com/questions/58272276
复制相似问题