python——dataframe基本操作

  1. 取指定的几列
df = df[0:(len(df) - 1)] # 取df的前n-1行
df[[column1,column2]]   #取某两列
df.iloc[:,0:200]         #不指定列名取前200列
df.describe() #描述性统计(对数值型数据列而言)

df.dtypes #查看各行的数据格式
df['列名'].astype(int)#转换某列的数据类型res_df['T'] = res_df['T'].apply(int)

#切片操作
df.iloc[1:10] #获取1-10行的数据
df.iloc[columns_index] #获取列的数据
df.iloc[1:5[1,2,5]]#获取1,2,5列的1~5行数据

df[columns].drop_duplicates() #剔除重复行数据

df.iloc[1:5[1,2,5]]=1#所选位置数据替换为1

#使用DataFrame筛选数据(类似SQL中的WHERE)
df['post_time'].isin(['2018-12-25']) #使用isin对数据进行筛选,返回行索引以及每行筛选的结果,若匹配则返回ture
df[df['post_time'].isin(['2018-12-25'])] #获取匹配结果为ture的行

from datetime import datetime
x='2018-12-31 17:51:33'  
print(datetime.strptime(x,"%Y-%m-%d %H:%M:%S"))#将时间字符串解析为时间元组
x=datetime.strptime(x,"%Y-%m-%d %H:%M:%S")
print(x.strftime("%Y-%m-%d")) #将时间元组转化成时间字符串
merge方法同样可实现,merge(df1,df2),没有指定连接列名默认将重复的列当作键

merge(df1,df2,on=['key1','key2'])

merge(df1,df2,rigth_on=,left_on=)#当列名不相同时同样可以进行合并

删除重复的行

df.drop_duplicates()      #删除所有列完全重合的行
df.drop_duplicates(['key1','key2'])    #删除列1和列2重复的行
  1. 多列计算
在Pandas中,DataFrame的一列就是一个Series, 可以通过map来对一列进行操作:

df['col2'] = df['col1'].map(lambda x: x**2)
其中lambda函数中的x代表当前元素。可以使用另外的函数来代替lambda函数,例如:

define square(x): 
  return (x ** 2) 
  
df['col2'] = df['col1'].map(square)
2.多列运算

apply()会将待处理的对象拆分成多个片段,然后对各片段调用传入的函数,最后尝试将各片段组合到一起。

要对DataFrame的多个列同时进行运算,可以使用apply,
例如
col3 = col1 + 2 * col2:

df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1) 
其中x带表当前行,可以通过下标进行索引。

合并dataframe

pd.concat([df1, df2])

重置DF索引
  需求:重组后的DF需要重置索引,通常发生在选择或排序操作后。

train = train.reset_index(drop=True)

选取DF前几列
  需求:分析的某个步骤中仅对DF的某些列进行分析。
  限制:不知道列名。

sub_train = train.iloc[:,0:2]

对DF插入一列
  需求:分析产生的派生数据需要放到DF里面。
  限制:指定插入列的位置

df.insert(1,'d',np.ones(4))

DF完全显示
  需求:有些行、列太长了,显示不全,但预览时想看。

#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)

DF取某一列的唯一值,并可视化其分布
  需求:本来用numpy的unique就可以解决,但如果要取的列不是数字,而是字符串,这个时候用DF的操作更好。

data = pd.read_csv('event.csv',dtype='str',header = 0)
city_set = data['city'].value_counts()
city_set[0:20].plot(kind='bar', title='Events in different city')
plt.show()

DF类数据库查询
  需求:DF本质就是一张表,如同关系数据库一般,有的时候要对数据进行较为复杂的查询。

DF条件查询 (Where)
choose_data = data[data['col'] == val] #单表单条件
choose_data = data[(data['col1'] == val1) & (data['col2'] == val2)] #单表多条件

DF判断是否在集合里(IN)
valid_year = np.arange(2010,2019,1) #条件
idx = data[data.year.isin(valid_year)].index #符合条件的索引
valid_data = data.iloc[idx,:] #按索引取值

DF做表连接 (join)
data = data.set_index('event', drop=True) #col = ['user','event']
data2 = data2.set_index('event', drop=True) #col = ['event','venue','time','group']
d = data.join(data2,on='event',how='left') #col = ['event','venue','time','group']
d = d.reset_index(drop=False)
d = d[['user','event','time','venue','group']] #col = ['user','event','time','venue','group']

DF按需排序 (Order by)
  需求:划分数据集时按时间划分,得先排序。
  限制:按指定列顺序排序,升序

data = data.sort_values(by=['user'],axis=0, ascending=True)

DF分类汇总 (Group by)
  需求:同数据库中的分类汇总,以计数的汇总为例

sc = sub_train.groupby(['user','item']).count()

DF去重 (Distinct)
  需求:通常根据不同的需求,按部分重复(某几列)和全重复进行去重。

testlist = list(test_data[test_data['user']==user]['item'].drop_duplicates()) #去重保留第一个```

```bash
Numpy
import numpy as np
1
NP随机初始化
  需求:对初值进行随机赋值。
  代码:

P = np.random.uniform(low=0,high=1,size=[N,d]) #N*d的矩阵,值在0~1之间
userP[u]=np.random.normal(0,0.01,dimension) #d维向量,正态分布X~N(0,0.01)随机赋值


Dictionary
字典遍历
  需求:字典数据结构一般存储稀疏矩阵比较方便,能节省空间。
  代码:

for key,value in dicts.items():
    print('key is:',key,'value is',value)


字典一键对应多值
  需求:通常列与列之间的交互是多对多的关系,可由一键多值的字典表达出来。
  代码:

from collections import defaultdict
rating = defaultdict(set)
    for i in range(0,len(train)):
	    user = train.iloc[i]['user']
	    item = train.iloc[i]['item']
	    score = train.iloc[i]['score']
	    rating[user].add(item)

OS
判断文件夹是否存在,没有就创建
  需求:由程序格式化创建文件夹,方便数据归档
  代码:

if os.path.exists('./myfile'):
    pass
else:
    os.mkdir('./myfile')


Time
时间戳转日期
import time
timeStamp = 1381419600
timeArray = time.localtime(timeStamp)
print(time.strftime("%Y/%m/%d %H:%M:%S", timeArray))



画图
图片高清保存,且完整显示
plt.savefig('Events in different city',dpi=300, bbox_inches = 'tight')

你可能感兴趣的:(python)