如何在Pandas DataFrame中提取行内数据?含多值分隔场景
Pandas DataFrame行内容提取问题解答
嘿,我来帮你搞定这两个Pandas提取的问题,都是日常处理DataFrame时很常见的场景,直接上干货:
1. 如何从Pandas DataFrame的行中提取指定内容?
提取行内容的方式取决于你的具体需求,常见的几种场景如下:
按列名提取指定列的所有行
如果明确知道要提取的列名,直接用列索引就能拿到整列的内容,支持单个或多个列:import pandas as pd # 先搞个示例DataFrame df = pd.DataFrame({ 'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'city': ['New York', 'London', 'Paris'] }) # 提取单个列的所有行 name_list = df['name'] print(name_list) # 提取多个列的所有行 name_city_subset = df[['name', 'city']] print(name_city_subset)按位置提取指定行/行列组合
如果不知道列名但知道位置,用iloc(基于整数位置的索引)就很方便,索引从0开始:# 提取第1行(索引为0)的所有内容 first_row = df.iloc[0] print(first_row) # 提取第1到第2行(索引0、1)的name和age列(位置0、1) specific_subset = df.iloc[0:2, [0, 1]] print(specific_subset)基于条件提取符合要求的行
要是需要筛选满足特定条件的行,直接把条件放进DataFrame的索引里就行:# 提取年龄大于28的所有行 older_people = df[df['age'] > 28] print(older_people)
2. 从用|分隔的category列中提取"Plane Travel"
这种多值用分隔符拼接的场景,用Pandas的字符串处理方法就能轻松搞定,分两种情况给你方案:
情况1:"Plane Travel"位置固定(比如总是第一个)
如果它永远在分隔后的第一个位置,直接拆分后取第一个元素:
# 示例DataFrame df = pd.DataFrame({ 'category': ['Plane Travel|Train Travel|Bus Travel', 'Plane Travel|Bus Travel', 'Plane Travel'] }) # 拆分列并提取第一个元素 df['plane_travel'] = df['category'].str.split('|').str[0] print(df)
情况2:"Plane Travel"位置不固定
要是它在字符串里的位置不确定,用正则提取或者判断存在性更稳妥:
# 还是用刚才的示例DataFrame,调整几个位置 df = pd.DataFrame({ 'category': ['Train Travel|Plane Travel|Bus Travel', 'Bus Travel|Plane Travel', 'Plane Travel|Train Travel'] }) # 方法1:用正则精准提取匹配的内容 df['plane_travel'] = df['category'].str.extract(r'(Plane Travel)') # 方法2:拆分后检查是否存在,存在就返回该值 df['plane_travel'] = df['category'].str.split('|').apply(lambda x: 'Plane Travel' if 'Plane Travel' in x else None) print(df)
两种方法都能拿到你要的"Plane Travel",正则的方法更简洁,而lambda的方式可以灵活处理不存在的情况(返回None或者你指定的默认值)。
内容的提问来源于stack exchange,提问作者Hitendra Munim
相关产品推荐
相关产品推荐

