Python小点dian儿: Python-Pandas-DataFrame 如何把df变为以数据中的某一列为index

版权声明:欢迎分享和转载,请注明出处 shuihupo:https://blog.csdn.net/shuihupo.同时,本博客部分会在云南省高校数据化运营管理工程中心博客同步。欢迎沟通交流:[email protected] https://blog.csdn.net/shuihupo/article/details/82527120

   

目录

 我们在读入数据的时候,数据本来有它自身的user_id,这行数据又是不进入模型训练的。我们怎么处理呢?  

法一:文件读入阶段

小点dian儿:,读入文件的几行,参数:nrows=行数

法二:在DateFrame阶段设置:

小点dian儿::读入文件的指定列,参数:usecols=["列名1',"列名2",.....],及前几行,

参数:nrows=行数。

小点dian儿:存入数据的时候,我们希望保留了数据在系统的行名或者不保存,

参数:index=None:


我们在读入数据的时候,数据本来有它自身的user_id,这行数据又是不进入模型训练的。我们怎么处理呢?

是不是在训练模型的时候,把train数据集删去user_id,同时,在test数据集上也先删去user_id,得到预测结果后再加上呢?

显然上面不是一种好的方法,虽然我们我们需要顾及这个数据的id不是自变量,不能加入训练,又要顾及读入数据会默认有一个index(行id),0,1,2,3……我们可以不使用默认的index,认为指定行名,就像指定数据库的键值(要求唯一)。怎么办呢,

法一:文件读入阶段

在读入阶段的时候指定,其中一列为index,命令如下,index_col='列名',这个列是你所指定为行id所在列的名字。

df = pd.read_csv(filepath, sep=',',index_col='user_id')

我们打印输入一下:

 df = pd.read_csv("C:/Users/train.csv", sep=',',index_col='user_id',nrows=5)


小点dian儿:,读入文件的几行,参数:nrows=行数

                  service_type  is_mix_service  online_time
user_id
Gx4sJzcQog01UhZL             4               0           85
kEXrhTiug93DIcLG             1               0           10
AouXr0EOUtSRdiYK             1               0           12
Yds7U30hnRZDiLtb             4               0          134
OFDTSXrhN9Q2mbVw             4               0           84

法二:在DateFrame阶段设置:

首先读入文件生成一个df:

>>> df = pd.read_csv("C:/Users/train.csv", sep=',',usecols=['service_type','online_tim
e','user_id'],nrows=5)
>>> df
   service_type  online_time           user_id
0             4           85  Gx4sJzcQog01UhZL
1             1           10  kEXrhTiug93DIcLG
2             1           12  AouXr0EOUtSRdiYK
3             4          134  Yds7U30hnRZDiLtb
4             4           84  OFDTSXrhN9Q2mbVw

小点dian儿::读入文件的指定列,参数:usecols=["列名1',"列名2",.....],及前几行,

参数:nrows=行数。

命令:dfname.set_index("列名"), 指定行的名称对应的列名。但是这个命令是不对原有的DateFrame改变:

>>> df.set_index('user_id')

                  service_type  online_time
user_id
Gx4sJzcQog01UhZL             4           85
kEXrhTiug93DIcLG             1           10
AouXr0EOUtSRdiYK             1           12
Yds7U30hnRZDiLtb             4          134
OFDTSXrhN9Q2mbVw             4           84
#df.set_index('user_id')是新生成的dateframe

>>> df
   service_type  online_time           user_id
0             4           85  Gx4sJzcQog01UhZL
1             1           10  kEXrhTiug93DIcLG
2             1           12  AouXr0EOUtSRdiYK
3             4          134  Yds7U30hnRZDiLtb
4             4           84  OFDTSXrhN9Q2mbVw
#df并没有改变

如何对原有的df改变呢:

>>> df.set_index(["user_id"], inplace=True)
>>> df
                  service_type  online_time
user_id
Gx4sJzcQog01UhZL             4           85
kEXrhTiug93DIcLG             1           10
AouXr0EOUtSRdiYK             1           12
Yds7U30hnRZDiLtb             4          134
OFDTSXrhN9Q2mbVw             4           84

完工。

小点dian儿:存入数据的时候,我们希望保留了数据在系统的行名或者不保存,

参数:index=None

在我们不进行如上的设计的时候,系统或分配默认的行index:0,1,2..在我们将运行结果存入文件,如果不加以设置,将会把这一index列,存入数据文件。(我们已经做好如上涉及,我们希望user_id,和结果同时被记录,则不需要如下index是否存储的设置)

>>> df = pd.read_csv("C:/Users/train.csv", sep=',')
>>> df
   service_type  online_time           user_id
0             4           85  Gx4sJzcQog01UhZL
1             1           10  kEXrhTiug93DIcLG
2             1           12  AouXr0EOUtSRdiYK
3             4          134  Yds7U30hnRZDiLtb
4             4           84  OFDTSXrhN9Q2mbVw

那这一行又是没有实际用处甚至在我们的csv或者excel这种本来就有表格索引的文件中是冗余的,那怎么办呢?

参数:index=None

    df.to_csv(save_path, index=None)

# 保存计算结果,不保留原有df中的行名
def save_result(save_path, y_test_predict):
    y_test_predict.to_csv(save_path, index=None)
    return None

猜你喜欢

转载自blog.csdn.net/shuihupo/article/details/82527120