首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pandas读取无结构的数据文件(无标题行和不同长度的行)

使用pandas读取无结构的数据文件(无标题行和不同长度的行)
EN

Stack Overflow用户
提问于 2019-03-06 00:28:55
回答 2查看 84关注 0票数 0

我正在从.dat文件中读取数据

下面是数据集外观的示例

代码语言:javascript
复制
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 

我想要做的是读取数据文件并从中随机获取一行,如下所示

代码语言:javascript
复制
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 

我一直在这么做:

代码语言:javascript
复制
    data_url = "someurl.dat"

    market_basket = pd.read_csv(data_url, header=None, delimiter='\n+', engine="python")
    sample = market_basket.sample(n=1)

但是当我输出sample的值时,我得到的是:

代码语言:javascript
复制
                                  0
40911  39 2787 2858 5016 5041 13569

更重要的是,当我查找输出行时,为什么我在数据集中找不到它?

EN

回答 2

Stack Overflow用户

发布于 2019-03-06 00:38:25

为什么是熊猫?你能简单地用普通的python打开这个文件吗?

类似于:

代码语言:javascript
复制
import random
with open(filename) as a:
    data = a.read().splitlines()
line = random.choice(data)
票数 1
EN

Stack Overflow用户

发布于 2019-03-06 01:16:18

这是Rafaël答案的pandas变体。

Pandas read_csv可以从文件中读取一行,这要归功于skiprows和nrows参数。困难的部分实际上是如何找到一个随机的行号...

因此,一种简单的方法是从输入文件中读取所有行,随机选择一行,并将这一行输入到数据帧中:

代码语言:javascript
复制
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)

顺便说一句,你的代码不能给你期望的数据帧。使用

代码语言:javascript
复制
market_basket = pd.read_csv(data_url, header=None, delimiter='\n+', engine="python")
sample = market_basket.sample(n=1)

market_basket是包含单个列的DataFrame,其中包含所有行,并按文件中的行号进行索引。因此,包含39 2787 2858 5016 5041 13569sample是第40911行。要解析它,您仍然需要tp首先提取实际的字段(.iloc[0][0])并拆分它:

代码语言:javascript
复制
sample = pd.read_csv(io.StringIO(sample.iloc[0][0]), sep='\s+', header=None)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55007376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档