【python】dataframe取行列、添加行列汇总

本文详细介绍了Pandas库中DataFrame对象的选择和添加操作,包括使用点属性和类字典属性选取列,通过索引和切片选取行,以及利用loc和iloc进行精确选取。此外,还讲解了如何添加新行和新列,如使用loc插入行,通过赋值创建新列,以及append和concat方法。内容涵盖了数据操作的基础和进阶技巧。

【取行列】

data是一个dataframe


data['w']  #选择表格中的'w'列,使用类字典属性,返回的是Series类型

data.w    #选择表格中的'w'列,使用点属性,返回的是Series类型

data[['w']]  #选择表格中的'w'列,返回的是DataFrame属性

data[['w','z']]  #选择表格中的'w'、'z'列

data[0:2]  #返回第1行到第2行的所有行,前闭后开,包括前不包括后

data[1:2]  #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,
       #如果采用data[1]则报错

data.ix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同

data['a':'b']  #利用index值进行切片,返回的是**前闭后闭**的DataFrame, 
        #即末端是包含的  
data.irow(0)   #取data的第一行
data.iloc[:, 0]   #取data的第一列

data.head()  #返回data的前几行数据,默认为前五行,需要前十行则dta.head(10)
data.tail()  #返回data的后几行数据,默认为后五行,需要后十行则data.tail(10)

ser.iget_value(0)  #选取ser序列中的第一个
ser.iget_value(-1) #选取ser序列中的最后一个,这种轴索引包含索引器的series不能采用ser[-1]去获取最后一个,这回引起歧义。

data.iloc[-1]   #选取DataFrame最后一行,返回的是Series
data.iloc[-1:]   #选取DataFrame最后一行,返回的是DataFrame
df.loc['a']   # 取‘a’行,返回类型是Series
df.loc[['a']]   # 取‘a’行,返回类型是DataFrame

data.loc['a',['w','x']]   #返回‘a’行'w'、'x'列,这种用于选取行索引列索引已知

data.iat[1,1]   #选取第二行第二列,用于已知行、列位置的选取。

【添加行列】

1、添加行

data.loc[0]=['cat', 3]   #在第0行插入cat行,值为3

data1.append(data2)   #直接append


data.concat
data.merge  #看场合

2、添加列

data['new column'] = [1,2,3,4]

insert方法不常用 

<think>嗯,用户的问题是关于Python DataFrame如何根据名数组筛选需要的。我需要结合提供的引用内容来回答。 查看引用[1],里面有提到"data['名'].tolist()"和"playerIds = salaries_2016['playerID'].tolist()",这说明用户确实在关注如何从DataFrame中提数据。引用[2]详细介绍了DataFrame的结构,提到可以通过名定位数据。引用[4]直接给出了关键方法:"将需要筛选的几数据的汇总成一个list,然后通过list筛选Dataframe"。 用户明确表示想根据名数组筛选,所以核心方法就是使用表作为索引。引用[4]中的描述最匹配:"按照含有指定名的表list来选择数据"。具体用法应该是df[表]。 让我整理实现步骤: 1. 准备表,比如cols = ['name', 'age'] 2. 直接使用df[cols]即可获包含这些的新DataFrame 需要提醒用户注意名拼写正确性和是否存在缺失。还可以补充iloc方法作为备选方案,虽然用户明确要求按名筛选。 考虑到用户可能在处理实际数据,示例代码中应该包含错误处理,比如try-except块捕获KeyError。另外提到subset参数的应用场景会很有帮助,虽然引用里没直接提及,但属于常见用法。 最后生成的问题要围绕DataFrame操作,比如如何排除特定、处理多级索引等自然延伸的问题。 </think>根据名数组筛选DataFrame的**核心方法**是使用表直接索引,以下是具体实现步骤和注意事项: ```python import pandas as pd # 创建示例DataFrame data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 35], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) # 需要筛选的名数组 target_columns = ['姓名', '城市'] # 可以是任意长度的名数组 # ✅ 正确方法:用表直接索引 filtered_df = df[target_columns] ``` ### 输出结果: ``` 姓名 城市 0 Alice 北京 1 Bob 上海 2 Charlie 广州 ``` ### 关键说明: 1. **直接索引法** `df[column_list]` 是Pandas官方推荐方式,支持同时选(引用[4]) 2. **`.loc` 方法**(支持行列混合筛选) ```python # 选所有行和指定 filtered_df = df.loc[:, target_columns] ``` 3. **`.filter()` 方法**(支持正则匹配) ```python # 精确匹配名 filtered_df = df.filter(items=target_columns) # 正则匹配(如选以"城"开头的) filtered_df = df.filter(regex='^城') ``` ### ️ 注意事项: - **名一致性**:表中的名必须与DataFrame名**完全匹配**(大小写敏感) - **缺失处理**:若表含不存在的名,会触发`KeyError`错误 - **高效技巧**: ```python # 先表与现有名的交集 valid_columns = [col for col in target_columns if col in df.columns] filtered_df = df[valid_columns] ``` ### 应用场景: - 从大型数据集提特定字段(如用户画像只需"姓名""年龄") - 批量处理同类型数据(如选所有以"_score"结尾的评分) - 动态生成报表时按需加载(引用[2]) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值