python - 如何从 url 读取数据到 pandas 数据框
问题描述
我正在尝试使用熊猫从https://download.bls.gov/pub/time.series/ee/ee.industry读取数据,如下所示:
import pandas as pd
url = 'https://download.bls.gov/pub/time.series/ee/ee.industry'
df = pd.read_csv(url, sep='\t')
还尝试获取分隔符:
import pandas as pd
url = 'https://download.bls.gov/pub/time.series/ee/ee.industry'
reader = pd.read_csv(url, sep = None, iterator = True)
inferred_sep = reader._engine.data.dialect.delimiter
df = pd.read_csv(url, sep=inferred_sep)
但是数据的格式不是很周密,数据框的列是正确的:
>>> df.columns
Index(['industry_code', 'SIC_code', 'publishing_status', 'industry_name'], dtype='object')
但是数据与列不对应,似乎所有数据都合并到前两列中,最后两列没有任何数据。关于更好地获取这些数据的任何建议/想法?
编辑 expexted 结果应该是这样的:
行业代码 | SIC_code | 发布状态 | 行业名称 |
---|---|---|---|
000000 | 不适用 | 乙 | 非农总量 1 T 1 |
解决方案
阅读器运行良好,但标题中的列数不正确。您可以使用其他列取回.reset_index()
,然后重命名这些列:
>>> df = pd.read_csv(url, sep='\t')
>>> n_missing_headers = df.index.nlevels
>>> cols = df.columns.to_list() + [f'col{n}' for n in range(n_missing_headers)]
>>> df.reset_index(inplace=True)
>>> df.columns = cols
>>> df.head()
industry_code SIC_code publishing_status industry_name col0 col1 col2
0 0 NaN B Total nonfarm 1 T 1
1 5000 NaN A Total private 1 T 2
2 5100 NaN A Goods-producing 1 T 3
3 100000 10-14 A Mining 2 T 4
4 101000 10 A Metal mining 3 T 5
如果需要,您可以保留前 4 列:
>>> df.iloc[:, :-n_missing_headers].head()
industry_code SIC_code publishing_status industry_name
0 0 NaN B Total nonfarm
1 5000 NaN A Total private
2 5100 NaN A Goods-producing
3 100000 10-14 A Mining
4 101000 10 A Metal mining
推荐阅读
- reactjs - 如何使 React 站点响应式
- java - Java 记录数据类型不适用于网络通信
- python - 使用 python 搜索并打开视频
- javascript - 为什么我的按钮没有激活我的验证功能
- azure - Azure DevOps VSTest 任务 - appconfig 设置
- python - 将 tflearn 模型转换为 keras 后的不同图
- c# - 流利的FTP。如何停止下载过程
- vidyo - 构建 vidyo.io-connector-react-native 示例应用程序时出错
- visual-studio-code - 在vscode中的行号之前设置图标
- java - 拓扑排序中的输入和输出帮助