python - 如何将字节数据类型转换为数据帧?
问题描述
我正在从 UCI ML 存储库下载一个 elnino 数据集。请参阅附加的数据集链接。
https://archive.ics.uci.edu/ml/machine-learning-databases/el_nino-mld/elnino.gz
我使用以下代码解压缩 .gz 文件。
import gzip
with gzip.open('C:\\Users\\suel.abbasi\\Downloads\\tao-all2.dat.gz', 'r') as file:
for line in file:
print(line)
上述代码的输出如下
b'1 80 3 7 800307 -0.02 -109.46 -6.8 0.7 . 26.14 26.24\n'
b'2 80 3 8 800308 -0.02 -109.46 -4.9 1.1 . 25.66 25.97\n'
b'3 80 3 9 800309 -0.02 -109.46 -4.5 2.2 . 25.69 25.28\n'
b'4 80 3 10 800310 -0.02 -109.46 -3.8 1.9 . 25.57 24.31\n'
b'5 80 3 11 800311 -0.02 -109.46 -4.2 1.5 . 25.3 23.19\n'
b'6 80 3 12 800312 -0.02 -109.46 -4.4 0.3 . 24.72 23.64\n'
b'7 80 3 13 800313 -0.02 -109.46 -3.2 0.1 . 24.66 24.34\n'
b'8 80 3 14 800314 -0.02 -109.46 -3.1 0.6 . 25.17 24.14\n'
b'9 80 3 15 800315 -0.02 -109.46 -3 1 . 25.59 24.24\n'
b'10 80 3 16 800316 -0.02 -109.46 -1.2 1 . 26.71 25.94\n'
b'11 80 3 17 800317 -0.02 -109.46 -0.1 0.7 . 27.28 26.65\n'
b'12 80 3 18 800318 -0.02 -109.46 -1.2 2.3 . 26.86 27.13\n'
b'13 80 3 19 800319 -0.02 -109.46 -4.1 -0.3 . 26.38 26.35\n'
b'14 80 3 20 800320 -0.02 -109.46 -4.8 -0.8 . 26.19 25.87\n'
b'15 80 3 21 800321 -0.02 -109.46 -5.2 2 . 26.08 25.38\n'
b'16 80 3 22 800322 -0.02 -109.46 -2.7 2.7 . 26.24 .\n'
b'17 80 3 23 800323 -0.02 -109.46 -4.4 1.1 . 26.05 .\n'
b'18 80 3 24 800324 -0.02 -109.46 -4.3 0.7 . 25.67 .\n'
b'19 80 3 25 800325 -0.02 -109.46 -3.8 0.5 . 25.39 .\n'
现在,我无法弄清楚如何将其转换为数据框?请帮忙
解决方案
Pandas 可以使用 读取压缩文本 (csv) 文件read_csv
,只需指定分隔符:
df = pd.read_csv('elnino.gz', sep='\s+', header=None)
结果:
0 1 2 3 4 5 6 7 8
0 1 1 8.96 -140.32 -6.3 -6.4 83.5 27.32 27.57
1 1 2 8.95 -140.32 -5.7 -3.6 86.4 26.70 27.62
2 1 3 8.96 -140.32 -6.2 -5.8 83.0 27.36 27.68
3 1 4 8.96 -140.34 -6.4 -5.3 82.2 27.32 27.70
4 1 5 8.96 -140.33 -4.9 -6.2 87.3 27.09 27.85
.. .. .. ... ... ... ... ... ... ...
777 59 10 -8.04 164.82 . . 93.6 26.89 28.52
778 59 11 -8.04 164.82 . . 92.3 27.62 28.44
779 59 12 -8.03 164.81 . . 93.2 28.33 28.43
780 59 13 -8.04 164.82 . . 95.5 28.44 28.51
781 59 14 -8.04 164.81 . . 93.4 28.67 28.61
[782 rows x 9 columns]
PS:您可以通过以下方式从 elnino.col 获得列名:
df.columns = pd.read_csv('elnino.col', header=None).iloc[:,0].values
推荐阅读
- python - ValueError:时间数据“无”与格式“%Y-%m-%dT%H:%M:%S.%f”不匹配
- html - 每次都强制浏览器链接到新的 pdf 副本?
- r - 将相同的行号分配给R中另一列中的重复值
- android - RecyclerView 中的项目确实保留在 android 中
- javascript - 使用 JQuery 从数组上的单选按钮获取单个值
- python - Keras 3类图像识别概率输出?
- css - Angular9/Ionic 5 Ion-Split-pane 问题
- node.js - 无法让 countDocuments 工作 Mongoose
- c - yylex 后无法打印报表
- c# - 实体框架 - 包含嵌套 json 对象的记录的存储过程调用:如何处理反序列化