python取数据框的几列_python pandas 数据框 条件选取行列数据

本文介绍了Python Pandas库中对数据框的条件选择操作,包括选取特定列、根据列值筛选行、空值处理、多项条件搜索、分组遍历以及Series排序。例如,通过`df[df['STATUS'] == "ACTIVE"]`可以选取'STATUS'列值为'ACTIVE'的行,而`df.groupby('CITY')`则可用于按'CITY'列进行数据分组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:http://blog.youkuaiyun.com/u010770993/article/details/70312506

我们说excel好用,在处理大型数据表格的时候,excel可以非常方便地进行筛选。那么pandas是否有类似的功能呢?答案是肯定的。下面介绍的几个操作,返回的类型都是dataframe,因此可以进行嵌套操作,非常方便。

一、选取几列组成新的dataframe:

df = df[['A列列明', 'S列列明', 'H列列明']]

二、选取某列'STATUS'里面元素为"ACTIVE"的行,即删掉列STATUS元素不是ACTIVE的行

df = df[df['STATUS'] == "ACTIVE"]

(单项条件搜索,类似SELECT ALL WHERE df.STATUS = ACTIVE)

三、选取'BADTHING'列为元素空的行,既badthing这列有内容的行全部去掉,组成一个新的dataframe

df = df[df['BADTHING'].isnull()]

(空值搜索)

四、选取GOODREASON列元素为列表['quality', 'cheap']内元素的行

df = df[df['GOODREASON'].isin(['quality', 'cheap'])]

(多项条件搜索,类似SELECT ALL WHERE df.GOODREASON= quality AND cheap)

五、分组并进行遍历,运用groupby和for:

groupByNew = df.groupby('CITY', sort=False)

for name, groupData in groupByNew:

# TODO …… ……

如代码所示,我们可以对dataframe以某列'CITY'进行分组。我们如何取出某组的数据呢?当然是用

for循环。取出来的name即是组名,而groupData同样是一个dataframe,可以进行更进一步操作。

六、对Series数据进行排序:

series= series.sort_values(ascending=False)  # 进行从大到小排序

进阶:关于groupby的一些信息:

在进行groupby运算后,直接打印会得一个object信息,添加groups参数后

print df.groupby(by=['CITY']).groups

打印出来会是带group标签和原数据行标签(也就是原来dataframe里面对应行的index)的组合信息:

{'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]

我们可以看到,按照groups来print,得出city为北京的情况下,对应原来的行标签第25998行、26134行等

即使指定了某列:

print df.groupby(by=['CITY'])['QUANTITY'].groups

依然会得出相同的结果:

{'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]

除非我们把每个分组的所有行都整理成一行,如用sum来求和:

print df.groupby(by=['CITY'])['QUANTITY'].sum()

这样就可以成功转换成dataframe了:

CITY

BEIJING        5

SHANGHAI  207

CHENGDU   518

……

汇总说明如下:

print '----------NEW------------\n', type(df.groupby(by=['CITY']))

print '----------NEW------------\n', type(df.groupby(by=['CITY']).sum())

print '----------NEW------------\n', type(df.groupby(by=['CITY'])['QUANTITY'])

print '----------NEW------------\n', type(df.groupby(by=['CITY'])['QUANTITY'].sum())

所得结果为:

----------NEW------------

----------NEW------------

----------NEW------------

----------NEW------------

说明:

一个dataframe经过groupby以后得到的类型是pandas.core.groupby.DataFrameGroupBy。而用for in循环取出的每个项的类型是pandas.core.frame.DataFrame

一个dataframe经过groupby再进行sum以后仍然是dataframe(不过具体通过那一列来sum有待考证)

一个dataframe经过groupby以后再进行列选取,得到的是pandas.core.groupby.SeriesGroupBy类型。可知用for in循环取出的是pandas.core.series.Series

一个series经过groupby再进行sum以后仍然是series

标签:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值