首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python:数据在采样到较小的数据集后添加了额外的列

python:数据在采样到较小的数据集后添加了额外的列
EN

Stack Overflow用户
提问于 2018-06-25 04:55:12
回答 1查看 38关注 0票数 0

这对我来说很奇怪:

我有一个包含前几行的5列csv数据集,如下所示:

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

采样数据的代码:

代码语言:javascript
复制
df = pd.read_csv(
        filename,
        header=0
        )
ddf = df.sample(n=100150)
ddf.to_csv(samplename, sep=',')

生成的采样文件如下所示:

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-25 04:59:08

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

因此需要将默认RangeIndex列名的header=0更改为header=None

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

代码语言:javascript
复制
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不是必需的)更容易地处理数据,而对于删除某些列,则使用drop

代码语言:javascript
复制
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), names=['col1','col2','col3','col4','col5'])
print (df)
   col1     col2     col3 col4        col5
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

df1 = df.drop('col4', axis=1)
print (df1)
   col1     col2     col3        col5
0     1  2268318  2520377  1511544070
1     1  2333346  2520771  1511561733
2     1  2576651   149192  1511572885
3     1  3830808  4181361  1511593493
4     1  4365585  2520377  1511596146
5     1  4606018  2735466  1511616481
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51013891

复制
相关文章

相似问题

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