我正在从.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)
但是当我输出sample的值时,这就是我得到的:
0
40911 39 2787 2858 5016 5041 13569
此外,当我寻找输出的行时,为什么在我的数据集中找不到它?
答案 0 :(得分:1)
为什么是熊猫?您可以简单地使用普通python打开文件吗?
类似的东西:
import random
with open(filename) as a:
data = a.read().splitlines()
line = random.choice(data)
答案 1 :(得分:1)
这是拉斐尔回答的熊猫变体。
熊猫read_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
。要解析它,您仍然需要先提取实际字段(.iloc[0][0]
)并拆分它:
sample = pd.read_csv(io.StringIO(sample.iloc[0][0]), sep='\s+', header=None)