Pandas100题笔记(2021.2.7)

-- pandas100题知识总结

1.一个series是一个一维的标记数组,可以容纳任何数据类型(整数、字符串、浮点数、Python对象等)。必须记住,与Python列表不同,一个series总是包含相同类型的数据。

2.
df2=pd.DataFrame({'A':1.,
                  'B':pd.Timestamp('20210207'),
                 'C':pd.Series(1,index=list(range(4)),dtype='float32'),
                 'D':np.array([3]*4,dtype='int32'),
                 'E':pd.Categorical(['test','train','test','train']),
                 'F':'foo'})

3.pd.date_range()函数
语法:date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs)
常用参数为start、end、periods、freq。
start:指定生成时间序列的开始时间
end:指定生成时间序列的结束时间
periods:指定生成时间序列的数量
freq:生成频率,默认‘D’,可以是’H’、‘D’、‘M’、‘5H’、‘10D’
例:dates=pd.date_range('20210207',periods=6)

4.设置随机种子
np.random.seed(0)
a=np.random.randn(6,4)  --返回6行4列,数值取正态分布的array

5. numpy.linspace
语法:linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
作用为:在指定的大间隔内,返回固定间隔的数据。他将返回“num”个等间距的样本,在区间[start, stop]中。其中,区间的结束端点可以被排除在外。
start:队列开始值
end:队列结束值
num:生成序列的个数,默认50
endpoint:为True表示包含区间末点
retstep:retstep会改变计算的输出,输出一个元组,而元组的两个元素分别是需要生成的数列和数列的步进差值。
dtype:指定输出的数据类型

6. 
random.rand():返回正态分布数值随机值
random.randn():返回数值取[0,1)的随机值
random.choice():在指定数字中选择生成随机array
例:np.random.choice(['Low','Medium','High'],N).tolist()
random.normal():生成高斯分布的概率密度随机数
loc:概率分布的均值
scale:概率分布的标准差
size:输出的shape,默认为None,只输出一个值
例:nd1 = np.random.normal(loc=1,scale=2,size=2)    #array([-0.46982446, -1.28956852])

df=pd.DataFrame({'A':pd.date_range(start='20210207',periods=N,freq='D'),
                'x':np.linspace(0,stop=N-1,num=N),
                'y':np.random.rand(N),
                'C':np.random.choice(['test1','test2','test3'],N).tolist(),
                'D':np.random.normal(100,10,size=N).tolist()
                })

7. reindex  重新索引
例:df_reindexed=df.reindex(index=[0,2,5],columns=['A','C','B'])

8.设置索引
DataFrame.set_index(keys, inplace=False,drop,append)
keys:列标签或列标签/数组列表,需要设置为索引的列
inplace:默认为False,适当修改DataFrame(不要创建新对象)
drop :True表示删除转为索引的列
append:append表示是否将列附加到现有索引,即不删除原来索引

9.重置索引
sr = pd.Series([10, 25, 3, 11, 24, 6])
# 创建索引
index_ = ['Coca Cola', 'Sprite', 'Coke', 'Fanta', 'Dew', 'ThumbsUp']
# 设置索引
sr.index = index_
result = sr.reset_index()
该 Series.reset_index() 函数已将给定Series对象的索引重置为默认值。它保留了索引,并将其转换为列。

10. 赋值
s=pd.Series([1,2,3,4,5],index=date_range('20210207',periods=6))
10.1 用索引自动对齐新增列的数据
df['F']=s
10.2 按numpy数组赋值
df.loc[:,'D']=np.array([5]*len(df))
[5]*6   返回列表
np.array([5]*6)     返回数组
10.3 用where条件赋值
df[df>0]=-df    注意,这种用法需要df所有列均为数值


11. 运算
11.1.计算一个数列的四分位数
p=pd.Series(np.random.normal(14,6,22))
state=np.random.RandomState(120)    作用类似于随机种子,可以保证每次随机的结果相同
p=pd.Series(state.normal(14,6,22))
print(percentile(p,q=[0,25,50,75,100]))
11.2 计算df某一列的平均值
df.mean(axis=0/1) 默认axis=0,即计算列
df.A.mean()
11.3 将函数应用到DataFrame的每一个数据元素
import pandas as pd
def add(a,b,c):
    return a+b+c

def main():
    data={'A':[1,2,3],
          'B':[4,5,6],
          'C':[7,8,9]}
    df=pd.DataFrame(data)
    print('Original DataFrame\n',df)
    
    df['add']=df.apply(lambda row:add(row['A'],row['B'],row['C']),axis=1)
    print('\nAfter Function DataFrame:')
    print(df)
    
if __name__=='__main__':
    main()
11.4 计算df某一列的和
df.A.sum(axis=0/1,skipna=True/False)    
skipna:计算结果时排除NA /空值

12. df合并
Pandas dataframe.append()函数的作用是:将其他dataframe的行追加到给定的dataframe的末尾,返回一个新的dataframe对象。
语法:
DataFrame.append( ignore_index=False,df1)
ignore_index=True表示不保留追加的df的原索引

13. 分组
“group by” 指的是涵盖下列一项或多项步骤的处理流程:
分割:按条件把数据分割成多组;
应用:为每组单独应用函数;
组合:将处理结果组合成一个数据结构。
df.groupby('A').sum()
df.groupby(['A','B']).sum()

14. 重塑
将numpy数组转换为给定形状的DataFrame
p = pd.Series(np.random.randint(1, 7, 8))
info=pd.DataFrame(p.values.reshape(2,4))


15.透视表
df.pivot_table(data,values,index,columns,aggfunc)   
例:pd.pivot_table(df,values = ['duration','director_facebook_likes'],columns = ['director_name'],index=['color'],aggfunc=[np.sum,np.mean])

16. 将列添加到df
16.1 列表赋值给df
address=["Delhi", "Bangalore", "Chennai" ,"Patna"]
df['address']=address
16.2 Series赋值给df
s=pd.Series([1,2,3,4])
df['S']=s
16.3添加具有特定索引名的行
employees.loc['Emp003'] = ['Sunny', 'Programmer', '2018-01-25', 45]

17. DataFrame迭代
import pandas as pd
import numpy as np

df = pd.DataFrame([{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}])
for index, row in df.iterrows():
    print(row['c1'], row['c2'])
    
18. DataFrame排序
18.1 按标签(索引)排序
sorted_df=df.sort_index(ascending=False/True)   ascending默认True
18.2 按实际值排序
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False)
axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照索引排序,即纵向排序,如果为1,则是横向排序
by:如果axis=0,那么by="列名";如果axis=1,那么by="行名";
ascending:布尔型,True则升序,可以是[True,False],即第一字段升序,第二个降序
inplace:布尔型,是否用排序后的数据框替换现有的数据框
例:df.sort_values(by=["C","B"],ascending=[False,True],inplace=True)

19. 删除df的行
df.drop(['A','B'])

20. 删除df的列
方法一:test_dict_df.drop(['id'],axis=1)
方法二:del test_dict_df.id 

你可能感兴趣的:(Pandas100题笔记(2021.2.7))