Pandas-筛选数据

2019-02-13  本文已影响0人  davidic

筛选数据

转置

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])

pandas如何去掉、过滤数据集中的某些值或者某些行?

删除某列

方法一:直接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)

pandas删除列

根据时间范围过滤

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

利用pandas进行数据分组及可视化

pandas聚合和分组运算——GroupBy技术(1)

例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()

去重

https://blog.csdn.net/xinxing__8185/article/details/48022401

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'])

上一篇下一篇

猜你喜欢

热点阅读