文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

pandas.DataFrame设置某一行为表头(列索引),设置某一列为行索引,按索引取多行多列

2023-09-15 11:54

关注

pandas读取文件
pandas.DataFrame 设置索引
pandas.DataFrame 读取单行/列,多行多列
pandas.DataFrame 添加行/列

利用pandas处理表格类型数据,快捷方便,不常用但是有的时候又是必要技能,在这里记录一下一些常用函数和自己的踩坑经验

目录

import pands as pd

这里设置的文件格式为.csv
文件名及文件原始内容:pandas_test.csv ,
在这里插入图片描述

import pands as pdfile_path = r'pandas_test.csv'df = pd.DataFrame(pd.read_csv(file_path))  # 简单读入,并将第一行作为表头# df1 = pd.DataFrame(pd.read_csv(file_path, header=None))  # 简单读入,**不要将第一行作为表头**# df2 = pd.DataFrame(pd.read_csv(file_path, index_col=3)) # 读入数据,并指定第3列作为行索引print(df)   a  b  c   d   # 默认将第一行设置为表头0  1  z  x   e1  2  x  h  wd2  3  f  j   x3  4  k  s   jprint(df1)   0  1  2   3   # 设置不将第一行设置为表头0  a  b  c   d1  1  z  x   e2  2  x  h  wd3  3  f  j   x4  4  k  s   jprint(df2)    a  b  c      # 读入数据,并指定第4列作为行索引d          e   1  z  xwd  2  x  hx   3  f  jj   4  k  s

3.1 设置某一行为列索引【表头】

# 设置某一行为列索引【表头】c_list = df.values.tolist()[1]  # 得到想要设置为列索引【表头】的某一行提取出来df.columns = c_list      # 设置列索引【表头】df.drop([1], inplace=True)  # 将原来的那一行删掉。# 这里的inplace=True,表示就在df这个数据表中进行修改,默认是Falseprint(df)    2  x  h wd0  1  z  x  e2  3  f  j  x3  4  k  s  j# df_new = df.drop([1])# 如果是默认的话,做出的修改就要将修改后的内容赋予新的变量才能呈现出和上面一样的效果# print(df_new)

3.2 设置某一列为行索引

# 设置某一列为行索引df.set_index('c', inplace=True)  # 设置表头为"c"的那一列为行索引print(df)   a  b   dc             # 这里看着这个c单独占一行很不爽,不过后面写入文件保存时会和表头对齐,就不纠结它了x  1  z   eh  2  x  wdj  3  f   xs  4  k   j

3.3 对列索引/表头重命名

# 对列索引【表头】重命名df.rename(columns={"c": "c_new", "a": "a_x"}, inplace=True)print(df)   a_x  b c_new   d0    1  z     x   e1    2  x     h  wd2    3  f     j   x3    4  k     s   j

4.1 取某一列/行【单列,单行】

4.1.1 按数字索引

col = df.iloc[:, 1]  # 按数字索引取第2列row = df.loc[1, :]   # 按数字索引取第2行# 注意:这里取出来的内容还是pands中的数据格式,如果要取得具体的内容,需要加上.valuesprint(df)   a  b  c   d0  1  z  x   e1  2  x  h  wd2  3  f  j   x3  4  k  s   j==========================================================print(type(col))<class 'pandas.core.series.Series'>print(col) 0    z1    x2    f3    kName: b, dtype: objectprint(col.values)['z' 'x' 'f' 'k']==========================================================print(row)a     2b     xc     hd    wdName: 1, dtype: objectprint(row.values)[2 'x' 'h' 'wd']

4.1.2 按指定索引(非数值型索引)

col = df["b"]      # 取出列索引为"c"的列row = df.loc["x"]  # 取出行索引为"x"的行print(col)cx    zh    xj    fs    kName: b, dtype: objectprint(row)a    1b    zd    eName: x, dtype: object

4.1.2 通过切片索引

row1 = df[0:1]  # 通过切片索引,取得第1print(row1)   a  b  c  d0  1  z  x  e

4.2 取多行多列

4.2.1 仅取多行

# 取多行# 1、直接取此用法需要注意,[]里面一般为列名,表示取某一列,若列名以列表的形式放入[],则可以去多列;单选列结果为Series,多选列结果为Dataframe。选取列名不能超出源数据列名,不然报错若为数值时,默认取行,且只能进行切片操作,不能单独选择,输出结果为Dataframe,即便只选择一行。df[]不能通过索引标签名来选择行(df['x'])rows = df[0:2]  # 取第1~2print(rows)   a  b  c   d0  1  z  x   e1  2  x  h  wd# 2、用 .loc 取.loc[]用法是根据标签名来定位,默认用法是df.loc[行标签(多个用列表),列标签(多个用列表)],如果只提取列,则行标签位置用:代替rows1 = df.loc[0:2]  # 取第1~3print(rows1)   a  b  c   d0  1  z  x   e1  2  x  h  wd2  3  f  j   x

4.2.2 仅取多列

# 1、直接取cols = df[["a","b"]]  # 注意,取多列时记得把列名以列表格式放入print(cols)   a  bc      x  1  zh  2  xj  3  fs  4  k==========================================================# 2.loccols1 = df.loc[:, ["a","b"]]  # 想取出**指定**的多列时用这个print(cols1)  # 取"a","b"两列   a  bc      x  1  zh  2  xj  3  fs  4  kcols2 = df.loc[:, "a":"b"]  # 通过切片取出多列时用这个# 注意,通过这样切片时,"a":"b"是左右包含的print(cols2)   a  bc      x  1  zh  2  xj  3  fs  4  k==========================================================# 3.iloc# 与.loc[]用法的区别是,该方法通过行列的位置*(数字)*来定位,从0开始计,左闭右开。cols3 = df.iloc[:, 0:2]  # 取前两列print(cols3)    a  bc      x  1  zh  2  xj  3  fs  4  k

4.2.3 同时取多行多列

# 1.locdf1 = df.loc[["x", "h"], ['a', 'd']]  # 用列表指定行列print(df1)   a   dc       x  1   eh  2  wddf2 = df.loc["x": "h", 'a': 'd']      # 通过切片取print(df2)   a  b   dc          x  1  z   eh  2  x  wd========================================================# 2.ilocdf3 = df.iloc[1:3, 0:2]print(df3)   a  bc      h  2  xj  3  f
print(df)   a  b   dc          x  1  z   eh  2  x  wdj  3  f   xs  4  k   j==========================================================# 加入列col = df.iloc[:, 1]  # 先按数字索引取第2列,作为添加的内容# 1、在最后一列后面加入一列df["e"] = col      # 直接通过[]添加一列,并将第2列作为新的一列加入原来的数据中;                     # 这里注意新的列名和之前原有的不要重复,否则会修改原有的那一列内容,而不是添加新的一列print(df)   a  b   d  ec             x  1  z   e  zh  2  x  wd  xj  3  f   x  fs  4  k   j  k--------------------------------------------------------# 2、在指定位置加入一列# df.insert(添加列位置索引序号,添加列名,数值,是否允许列名重复)df.insert(1, "i", col, allow_duplicates=True)print(df)   a  i  b   d  ec                x  1  z  z   e  zh  2  x  x  wd  xj  3  f  f   x  fs  4  k  k   j  k======================================================================# 加入行row_add = df.loc["x"]    # 取出行索引为"x"的一行作为新加入的内容# 1.locdf.loc["w"] = row_add    # 在最后一行后加入一行索引为"w"的内容print(df)   a  i  b   d  ec                x  1  z  z   e  zh  2  x  x  wd  xj  3  f  f   x  fs  4  k  k   j  kw  1  z  z   e  z--------------------------------------------------------# 2.appenddf4 = df.append(row_add)  # 把上面取出的一行直接加入到最后一行后面print(df4)   a  i  b   d  ec                x  1  z  z   e  zh  2  x  x  wd  xj  3  f  f   x  fs  4  k  k   j  kx  1  z  z   e  zdf4 = df.append(row_add, ignore_index=True)  # 如果不想要原来的行索引,可以加入这个参数print(df4)   a  i  b   d  e0  1  z  z   e  z1  2  x  x  wd  x2  3  f  f   x  f3  4  k  k   j  k4  1  z  z   e  z

来源地址:https://blog.csdn.net/Admiral_x/article/details/126415277

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯