python - 使用pandas读取没有结构的数据文件(没有标题行和不同长度的行)
问题描述
我正在从 .dat 文件中读取数据
这是数据集的示例
38 39 41 109 110
39 111 112 113 114 115 116 117 118
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
48 134 135 136
39 48 137 138 139 140 141 142 143 144 145 146 147 148 149
我要做的是读取数据文件并从中获取随机行
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
我一直在这样做:
data_url = "someurl.dat"
market_basket = pd.read_csv(data_url, header=None, delimiter='\n+', engine="python")
sample = market_basket.sample(n=1)
但是当我输出样本的值时,这就是我得到的:
0
40911 39 2787 2858 5016 5041 13569
此外,当我寻找输出的行时,我在我的数据集中找不到它,为什么?
解决方案
这是 Rafaël 答案的熊猫变体。
Pandasread_csv
可以从文件中读取一行,这要归功于 skiprows 和 nrows 参数。困难的部分实际上是如何找到一个随机的行号......
因此,一种简单的方法是从输入文件中读取所有行,选择一个随机行并将该单行输入数据帧:
import pandas as pd
import random
import io
with open("someurl.dat") as fd:
line = random.choice(fd.readlines)
df = pd.read_csv(io.StringIO(line), sep='\s+', header=None)
顺便说一句,您的代码无法为您提供预期的数据框。和
market_basket = pd.read_csv(data_url, header=None, delimiter='\n+', engine="python")
sample = market_basket.sample(n=1)
market_basket
是一个单列包含完整行的 DataFrame,由文件中的行号索引。sample
第 40911 行也是如此,包含39 2787 2858 5016 5041 13569
. 要解析它,您仍然需要 tp 首先提取实际字段 ( .iloc[0][0]
) 并将其拆分:
sample = pd.read_csv(io.StringIO(sample.iloc[0][0]), sep='\s+', header=None)
推荐阅读
- regex - 将 htaccess 映射中的规则重写为错误的 url
- java - 将 Java.io.BufferedReader 转换为 Python 对象
- django - 包含图像、文件和标签的模型的夹具数据
- python - 我有这个错误: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
- c - 如何获得在 GNU-EFI 下工作的协议?
- php - 谷歌分析 v4 和谷歌 API
- php - laravel 7 …/vendor/composer/autoload_real.php 中没有这样的文件或目录
- r - R:自定义函数 - 改变现有列
- sql - 转置postgresql中的列 - 横向连接?
- javascript - 重新加载页面后在 setInterval() 上节省时间?