pandas学习笔记

来源:互联网 发布:作图软件有cs? 编辑:程序博客网 时间:2024/05/22 06:57

1.数据类型Series
Series 是一个一维数组结构,可以存入任一一种python的数据类型(integers, strings, floating point numbers, Python objects, etc.)。
创建一个Series的最基本方法是:

s = pd.Series(data, index=index)

index指代一个标签轴链表(list),因此,根据data的数据类型不同,我们可以大致有如下方式新建Series,data指代许多不同的数据类型:

  • a Python dict:一个字典
  • an ndarray:一个ndarray类型
  • a scalar value (like 5):一个标量
    • from ndarray: 如果data是ndarray类型,那么index的长度必须与data一样。如果index值缺省,整数链表[0,1,2,…,len(data)-1]将会被自动初始化为index。
    • from dict: 如果data是字典结构,index默认为字典中的key值。如果在创建时index被重新赋值,那么value将会与新建的index对应,如果index值不在字典的key值 中,那么value将会被初始化为NaN。
      注:NaN不是一个值,在pandas中代表缺省值。
    • from scalar value: 如果data是一个标量,index值必须被初始化,value值将会重复对应到每一个index。Series与ndarray类似,Series的操作与ndarray非常类似,但是 Series可以应用numpy中的大多数函数,例如切片操作。
      Series与dict类似,Series像一个固定大小的dict,可以通过index赋值或者取值。Series矢量操作以及标签对齐运算,在数据分析时,numpy无需进行循 环即可对每一个值进行同等操作,Series也可以通过调用numpy中的函数达到预期运算结果。

2.DataFrame: 二维数据
利用pandas数据画图:生成一个DataFrame,将横坐标设置成索引,纵坐标设置成value即可。

3.设置某列为索引

df.set_index('day', inplace=True) #改变df

4.取出两列

df[['bounce rate', 'day']]

5.将series变成list

# series => listdf['day'].tolist()

6.将DataFrame变成ndarray类型

np.array(df[['day', 'bounce_rate']])  dataframe=>array

7.将DataFrame保存成csv

df=pd.read_csv("a.csv", header=None, sep=",", index=True)

8.设置索引之后再保存为新的文件

df.set_index("data", inplace=True)df.to_csv("new.csv")

9.读文件时,指定某列为索引

df=pd.read_csv('a.csv', index_col=0)制定第一列为索引列

10.将文件保存为Html格式

df.to_html('a.html')

11.读取文件时,给数据指定新的列名称

df=pd.read_csv('a.csv', name=[])指定新的列的名称

12.重新命名df的列的名字

df.rename(columns={'a':'b', 'c':'d'})

13.选出符合条件的列

avg_time[(avg_time['intersection_id']=='C') & (avg_time['tollgate_id']==1)]

14.对某一个Series进行操作

Series.str.split(',')

15.将两个dataframe按照某一列来merge

merged=pd.merge(df1, df2, on='year')merged.set_index('year', inplace=True)print(merged)

16.将两个DataFrame合并

pd.join(df1, df2)

17.去掉所有的含nan的行

dataframe.dropna() 

18.当所有列都是nan时被去掉,how的值, default=any

dataframe.dropna(how="all") #dataframe.fillna(method="ffill/bfill", inplace=True) #填充nan

19.填充nan为特定数值

dataframe.fillna(value=-99999, inplace=True)

20.在给定的单位时间内重新取样

dataframe.resample(rule='A')

21.每隔3个数据进行一次加法,当前数据与前面紧邻的2个数据做加法,和作为新数据的值.如果前面的数据没有3个,此时为nan,rolling_mean, roll_std等都是相同的用法。

dataframe.rolling_sum(df['a'], 3)

22.在子图中画出标准差

fig=plt.figure()ax1=plt.subplot2grid((2,1),(0,0))ax2=plt.subplot2grid((2,1),(1,0),sharex=ax1)df=pd.read_csv()df['b']=pd.rolling_mean(df['a'], 5)df['c']=pd.rolling_std(df['a'],5)df[['a','b']].plot(ax=ax1)df['c'].plot(ax=ax2)plt.show()

23.df.plot()默认将index当成横坐标,将其他列当成纵坐标,因此一个图可能有条线

24.dd=df.describe() #获取所有列的count, mean, std, min, 25%…

25.选出特定的行:选出标准差小于某一数的所有行,多个条件用&连接

df=df[(df['std'] < df_std)]

26.将dataframe中的某一列转换成datetime类型

df['a']=pd.to_datetime(da['a'])

27.计算不同列之间的相关度,返回一个dataframe,cols行和cols列,对角线为1

df.corr()

28.将多个Seies和dataframe join起来

dataframe.join([a1,a2,a3])

29.计算同一个column相邻两个数字之间的变化率

dataframe/series.pct_change() 

30.替换DataFrame中的特定数值,例如:将数据中的所有的1和2都替换成3

dataframe.replace([1,2], 3, inplace=True)

31.使用一些特定的值:

numpy.inf #无穷

32.将所有的列向下移动一格,index保持不变,第1行的数据用NaN代替

series/dataframe.shift(1):

33.自定义函数,并操作在DataFrame上

def create_label(cur, fur):        fafdreutrn cur > furdf['newcol'] = list(map(create_label, df['col1'], df['col2'])) #根据现有数据重新造出一列

34.对DataFrame的字符串进行截取

df['col1']=df['col1'].str[1:-1] #截取每个字符串的第1到-1的中间字符串

35.每隔一定数据进行一次操作,例如:每隔10个数据进行一次func操作

pandas.rolling_apply(series, window=10, func)

36.去掉某些行

dataframe.drop(['col1', 'col2']) #去掉2行

37.去掉某些列

dataframe.drop(['col1', 'col2'], axis=1) #去掉2列,后面的axis指定是行还是列

38.将dataframe转array:

X=numpy.array(dataframe)

39.dataframe的普通下标是列索引,行索引使用df.ix[index]

40.apply(func,axis=0)和applymap(func):
apply用在DataFrame会默认将func用在每个列上,如果axis=1表示将func用在行上。applymap表示func用在每个元素上。

41.Series.map(func):将Series中的元素,每个都当做func的参数使用一遍,返回执行结果组成的Series

42.DataFrame排序:

df.sort_values(['birthday'], ascending=False)

函数原型:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')

参数:

  • by : 排序的列,可为list
  • axis : {0 or ‘index’, 1 or ‘columns’}, default 0 按行排序还是列
  • ascending :升序还是降序,可为bool类型的list,若为list,则长度应该与by的长度一致
  • inplace : bool, default False if True, perform operation in-place
  • kind : {‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’:排序方法
  • na_position : 如何处理Nan数据{‘first’, ‘last’}, default ‘last’ first puts NaNs at the beginning, last puts NaNs at the end

43.dataframe多条件选择数据

movies[(movies['a'] > 1) & (movies['b'] < 10)]# 如果是或的话,用|movies[(movies['a'] > 1) | (movies['b'] < 10)]movies[movies.isin(['crime','drama','action'])] 选出是crime或者drama或者action的电影

44.将某一列的数据进行转换:

train.sex.map({'female':0, 'male':1}) #0代表女,1代表男

45.切片操作

df.loc[row,col]进行切片,row和col可以是:分隔,也可以是list,如df.loc[0:5, ['sex', sex_Num']]

46.apply函数:作用于Series和DataFrame

series.apply(func) 对于每个元素,应用func函数,然后返回一个Series

使用自定义函数

def func(list, pos1):    return list[pos1]train.name.str.split(',').apply(func, 1)

47.dataframe.dtypes #打印数据类型

48.改变某列的数据类型: df.col1.astype(float)
49.读取文件时指定某些列的数据类型:

pd.read_table(filename, dtype={col1:float})

50.判断某一列是否含有某字符:

series.str.contains('aaa').head()

51.获取所有重复的行

users.duplicated()users.loc[users.duplicated(), :] #查看重复行users.loc[users.duplicated(keep="first"), :] #查看重复行,保留第一个重复项users.loc[users.duplicated(keep="last"), :] #查看重复行,保留最后一个重复项users.loc[users.duplicated(keep=False), :] #查看重复行,所有重复项都保留users.drop_duplicates(keep="first") #去掉重复行users.duplicated(subset=['col1','col2]) #当其中两列数值相同时,认为是重复的user.drop_duplicates(subset=['col1', 'col2']) #去掉重复行

52.使用dataframe.loc[:,:]来定位

df.loc[[1,3,5],['city':'state']] #定位

可以使用loc来条件选取

df.loc[df.col1='abc' & df.col2='def', :]

53.df.iloc() 与loc类似,但是要使用数组来索引行和列

54.dataframe.ix[] #可以使用index或者label索引

55.series.str: 提供了操作字符串的方法,会对series中的每个元素应用此方法,然后返回。而且某些函数可以链式使用:series.str.replace().replace() 可以链式使用

56.df.append({col:value, …}) #添加数据

57.将dataframe转换为ndarry:

numpy.array(df.values.tolist())

58.pandas指定第一列为index:
pandas.read_csv(filename, index_col=0)
pandas选择子列:

X = data[['a','b']]

59.pandas行选择只是根据一个bool类型的Series来

X_test[(y_pred_class==1) & (y_test==0)] #打印FP(False Positive)的值 <=> X_test[y_pred_class>y_test]

60.只取出数值df.values,取出index,df.index

61.pandas进行one-hot编码

pandas.get_dummies(series/dataframe, prefix=['col1', 'col2'], columns=['c1', 'c2'])df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],'C': [1, 2, 3]})pd.get_dummies(df, prefix=['col1', 'col2'])a = pd.DataFrame({"A":[1,2,3], "B":[4,5,6], "C":[1,4,5]})b = pd.get_dummies(a, prefix=["colA", "colB", "colC"], columns=["A", "B", "C"])print(b)

62.pandas进行group:

dg = dataframe.groupby(col1): #可以按照多列来group# 对GroupbyObject对象进行遍历for item in dg:    print(item[0]) #values of col1,col1的具体数值    print(pd.DataFrame(item[1])) #dataframe
原创粉丝点击