筛选数据
转置
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'])