Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:在对一个小数据集进行采样之后,数据被添加到一个额外的列中_Python_Sample - Fatal编程技术网

python:在对一个小数据集进行采样之后,数据被添加到一个额外的列中

python:在对一个小数据集进行采样之后,数据被添加到一个额外的列中,python,sample,Python,Sample,这对我来说很奇怪: 我有一个5列csv数据集,前几行如下: 1,2268318,2520377,pv,1511544070 1,2333346,2520771,pv,1511561733 1,2576651,149192,pv,1511572885 1,3830808,4181361,pv,1511593493 1,4365585,2520377,pv,1511596146 1,4606018,2735466,pv,1511616481 对数据进行采样的代码: df = pd.read_csv

这对我来说很奇怪:

我有一个5列csv数据集,前几行如下:

1,2268318,2520377,pv,1511544070
1,2333346,2520771,pv,1511561733
1,2576651,149192,pv,1511572885
1,3830808,4181361,pv,1511593493
1,4365585,2520377,pv,1511596146
1,4606018,2735466,pv,1511616481
对数据进行采样的代码:

df = pd.read_csv(
        filename,
        header=0
        )
ddf = df.sample(n=100150)
ddf.to_csv(samplename, sep=',')
生成的采样文件如下所示:

1,2268318,2520377,pv,1511544070
50533941,564438,1311198,2806049,pv,1511700754
53243335,689136,111697,154040,pv,1512264559
68168213,452960,119903,1151115,pv,1511711183
18695132,942795,2288684,1526856,pv,1511594854
您可以看到,由于某些奇怪的原因,采样数据包含除第一行(第一行是正确的)之外的6列

代码怎么了?如何获得随机生成的样本(比例可调)

我正在spyder/pycharm中使用python 3.6


谢谢。

我认为问题在于您的第一个数据行被设置为列名称

import pandas as pd

temp=u"""1,2268318,2520377,pv,1511544070
1,2333346,2520771,pv,1511561733
1,2576651,149192,pv,1511572885
1,3830808,4181361,pv,1511593493
1,4365585,2520377,pv,1511596146
1,4606018,2735466,pv,1511616481"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), header=None)

print (df)
   0        1        2   3           4
0  1  2268318  2520377  pv  1511544070
1  1  2333346  2520771  pv  1511561733
2  1  2576651   149192  pv  1511572885
3  1  3830808  4181361  pv  1511593493
4  1  4365585  2520377  pv  1511596146
5  1  4606018  2735466  pv  1511616481
因此,需要将默认
RangeIndex
列名称的
header=0
更改为
header=None

import pandas as pd

temp=u"""1,2268318,2520377,pv,1511544070
1,2333346,2520771,pv,1511561733
1,2576651,149192,pv,1511572885
1,3830808,4181361,pv,1511593493
1,4365585,2520377,pv,1511596146
1,4606018,2735466,pv,1511616481"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), header=None)

print (df)
   0        1        2   3           4
0  1  2268318  2520377  pv  1511544070
1  1  2333346  2520771  pv  1511561733
2  1  2576651   149192  pv  1511572885
3  1  3830808  4181361  pv  1511593493
4  1  4365585  2520377  pv  1511596146
5  1  4606018  2735466  pv  1511616481
额外的第一列称为索引,如果需要将其删除(如果将
DataFrame
写入
csv
则使用参数
index=False
),对于删除列名称
header=None

df.to_csv(file, index=False, header=None)

1,2268318,2520377,pv,1511544070
1,2333346,2520771,pv,1511561733
1,2576651,149192,pv,1511572885
1,3830808,4181361,pv,1511593493
1,4365585,2520377,pv,1511596146
1,4606018,2735466,pv,1511616481
编辑:

我建议创建自定义列名称,以便通过参数
names
(不需要
header=None
)更轻松地处理数据,并删除一些列:


谢谢你的快速回答。但不正确,新数据集变为:,0,1,2,3,4 25371519763810460074756105,pv,1511606930以某种方式添加了一个额外的列。该额外列称为索引,如果需要在写入csv时使用
df.to_csv(文件,索引=False,标题=无)
谢谢。df=pd.read_csv(filename,index=False,header=None)TypeError:parser_f()得到一个意外的关键字参数'index'@Choix-在read_csv中,没有参数
index
,因为每个数据帧都有索引,默认范围为index。如果仅写入csv,则可以删除。非常感谢@jezrael。我建议您阅读和的文档。在这里,您会注意到
read\u csv
header=0
是默认值,这意味着第一行被视为标题。您很可能希望
header=None