pandas 过滤某一列的值_Pandas-筛选数据

筛选数据

转置

df.T

遍历

traj_plot.py

df = df.set_index('gpstime')

for index, row in df.iterrows():

locationF.write("p%s | %s | %s | %s | %s " % (str(cnt), index, str(row[0]), str(row[1]), str(row[2])) + '\n' )

import numpy as np

import pandas as pd

def _map(data, exp):

for index, row in data.iterrows(): # 获取每行的index、row

for col_name in data.columns:

row[col_name] = exp(row[col_name]) # 把结果返回给data

return data

def _1map(data, exp):

_data = [[exp(row[col_name]) # 把结果转换成2级list

for col_name in data.columns]

for index, row in data.iterrows()

]

return _data

if __name__ == "__main__":

inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]

df = pd.DataFrame(inp)

temp = _map(df, lambda ele: ele+1 )

print temp

_temp = _1map(df, lambda ele: ele+1)

res_data = pd.DataFrame(_temp) # 对2级list转换成DataFrame

print res_data

排序

通过列名来排序

#对于矩阵,axis=0表示行,1表示列

df.sort_index(axis=1, ascending=False)

通过某一列的数值排序

df.sort_values(by='B')

import pandas as pd

df = pd.read_csv('./query_result.csv', sep=',')

# 转为日期型

df['gpstime'] = pd.to_datetime(df['gpstime'])

# 按某一列排序

df.sort_values(['gpstime'])

选择

series选择某行

df_app_no[0] #不需要跟列名,因为只有一列

选择某个行列的值

bad_predict_label.iloc[i, 0]

表示选择第i行,第0列的值

选择某一列

df['A']

某几列

col_n = ['名称','收盘价','日期']

a = pd.DataFrame(df,columns = col_n)

选择某几行

df[0:3]

#也可以通过行的索引来选择,但是不能单独写某一行

df['20130102':'20130104']

通过条件过滤行

df_pred.label[df_pred['label']<1]

选择几列转为矩阵

coords=dftest.as_matrix(columns=['longitude','latitude'])

抽样

df_train_p = df_train_p.sample(frac=0.7)

过滤

找到为null的

print(dfall[dfall.isnull().values == True])

删除某列

方法一:直接del DF['column-name']

方法二:采用drop方法,有下面三种等价的表达式:

1. DF= DF.drop('column_name', 1);

2. DF.drop('column_name',axis=1, inplace=True)

# inplace=true表示对原DF操作,否则将结果生成在一个新的DF中

3. DF.drop(DF.columns[ : ], axis=1,inplace=True) # Note: zero indexed

x = [1,2] #删除多列需给定列表,否则参数过多

df.drop(df.columns[x],axis=1,inplace=True)

根据时间范围过滤

df = df.set_index('gpstime')

df['2018-04-22 01:00:00': '2018-04-22 05:00:00']

某一列按条件过滤

nightdf = nightdf[nightdf['speed']<1]

df06 = df04.loc[True - (float(df04.columns[-6]) > 0.0)]

# 验证有效的方法

df_pred_raw.due_type3[(df_pred_raw['due_type3']<12) & (df_pred_raw['due_type3']>5)]

行列同时过滤

wrong_idx = result[(result['pred']<0.95) & (result['label']>0.05)].index

df_pred_wrong = df_pred_raw.loc[wrong_idx, ['yq30_term_rate_3','due_type3','zd_term_rate']]

用正则过滤

df.filter(regex=("d.*"))

>>

d1 d2

0 2 3

1 3 4

2 4 5

df.select(lambda col: col.startswith('d'), axis=1)

>>

d1 d2

0 2 3

1 3 4

2 4 5

df_trains = df_trains.filter(regex=(".*3days|label|.*7days"))

groupby

例1

from sklearn.datasets.samples_generator import make_blobs

from matplotlib import pyplot

from pandas import DataFrame

# generate 2d classification dataset

X, y = make_blobs(n_samples=100, centers=3, n_features=2)

# dict中定义三个key,分别是坐标和label,再通过dict创建DataFrame

df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

colors = {0:'red', 1:'blue', 2:'green'}

fig, ax = pyplot.subplots()

#groupby可以通过传入需要分组的参数实现对数据的分组

grouped = df.groupby('label')

for key, group in grouped:

group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

pyplot.show()

例2

import pandas as pd

import matplotlib.pyplot as plt

# 把数据划分到自定义的区间中

def cla(n,lim):

return'[%.f,%.f)'%(lim*(n//lim),lim*(n//lim)+lim) # map function

# 默认第一行是标题,从第二行开始是数据。sep是分隔符

df = pd.read_csv('/home/david/iaudience-plan-statistics.csv', sep=',')

# 设置某列的数据类型

df['precent'] = df['precent'].astype('float64')

# 对planid做group,group后对precent做sum

grouped = df['precent'].groupby(df['planid']).sum()

c = pd.DataFrame(grouped)

# 用c.precent或c['precent']都可以

addone = pd.Series([cla(s,1) for s in c.precent])

c['addone'] = addone

groups3 = c.groupby(['addone']).count()

groups3['precent'].plot('bar')

plt.show()

去重

from pandas import Series, DataFrame

data = DataFrame({'k': [1, 1, 2, 2]})

print data

IsDuplicated = data.duplicated()

print IsDuplicated

print type(IsDuplicated)

data = data.drop_duplicates()

print data

DataFrame的duplicated方法返回一个布尔型Series,表示各行是否重复行。

而 drop_duplicates方法,它用于返回一个移除了重复行的DataFrame

这两个方法会判断全部列,你也可以指定部分列进行重复项判段。

例如,希望对名字为k2的列进行去重,

data.drop_duplicates(['k2'])

你可能感兴趣的:(pandas,过滤某一列的值)