pandas基础知识

pandas

参考资料: https://www.jianshu.com/p/7f4945b5d29c
pandas库基于numpy,为python编程语言提供便利的数据分析工具

import pandas as pd

Series 一维的带标签的数组类型,DataFrame二维的有标签的数据

s = pd.Series([3, -5, 7, 4], index=['a', 'b', 'c', 'd'])
data = {'Country': ['Brazil', 'China', 'India'],
       'Capital': ['Brasilia', 'Beijing', 'New Delhi']
       }
df = pd.DataFrame(data, columns=['Country', 'Capital'])

读取和写入文件

# 读取和写入csv文件
pd.read_csv('test.csv', header=None)
df.to_csv('myDataFrame.csv')
pd.read_csv('myDataFrame.csv', header=None)

# 读取和写入excel文件
df.to_excel('myDataFrame.xlsx', sheet_name='Sheet1')
pd.read_excel('myDataFrame.xlsx')

# 从相同的excel文件中读取多个sheet
xlsx = pd.ExcelFile('myDataFrame.xlsx')
df = pd.read_excel(xlsx, 'Sheet1')
help(pd.Series.loc) # 获取帮助资料

取值

s['b']                # -5
s.values              # [3 -5 7 4]
df[1: ]               # 获取第二行及其以后的数据

# 通过位置获取元素值
df.iloc[0][0]         #'Brazil'

# 通过标签获取元素值
df.loc[1]['Country']  #'China' 

# 通过标签和位置一起获取元素值
df.loc[1]              # 获取索引值为1的行值:Country China Captial Beijing
df['Capital']          # 获取列值
df.Capital             # 获取列值
df.loc[:, 'Capital']   # 显示'Captial'的所有列
df.loc[:, ['Capital', 'Country']]   # 显示'Captial', 'Country'的所有列

# 通过bool索引取值
s[s>1]                 # 获取值大于2的所有元素值及其索引
s[(s>3) | (s<-2)]      # 多条件筛选 (或)
s[(s>3) & (s<-2)]      # 多条件筛选 (与)
df[df['Country'] != 'India']  # 筛选出Country列不为Inida的数据

删除元素

s.drop(['a', 'c'])         # 删除索引为 a, c 的值, 默认的axis=0
df.drop('Country', axis=1) # 删除Country一列

排序

df.sort_index()
df.sort_values(by='Country')  # 按照Country一列排序
df.rank()

基本属性

df.shape           # (3, 2)
df.index           # Int64Index([0, 1, 2], dtype='int64')
df.columns         # Index(['Country', 'Capital'], dtype='object')
df.info()          # info on DataFrame
df.count()         # Country    3  Capital    3  dtype: int64
df['index'] = [0, 1, 2] # 增加一列
df.sum()           # 对数值型数据求和,对字符串型数据进行拼接
df.cumsum()        # 显示逐级拼接的结果
df.min()           # 获取每一列的最小值
df.max()           # 获取每一列的最大值
df.describe()      # 统计信息的获取
df.median()        # 获取中位数
df.mean()          # 获取均值

新增/删除数据

df['index'] = [0, 1, 2]                       # 增加一列
df.loc[df.shape[0]+1] = ['Japan', 'Tokyo', 3] # 新增一行数据
del df['index']                               # 删除一列数据(index列)

排序

df['sort'] = [5, 7, 3]
df = df.sort_index(by=['sort'])   # 按照列进行排序
df = df.sort_values(by=['sort'])

使用apply函数

f = lambda x: x*2
df.apply(f)       # 使用apply函数 对每个元素进行操作      
df.applymap(f)

DataAlignment

s3 = pd.Series([7, -2, 3, 5], index=['a', 'c', 'd', 'e'])
s + s3                        # 对索引不同时存在的数据求和为 NaN
s.add(s3, fill_value=0)       # 索引不同时存在的另一个赋值为0,进行求和操作
s.sub(s3, fill_value=2)       # 赋值2 做减法
s.div(s3, fill_value=2)       # 赋值2 做除法
s.mul(s3, fill_value=2)       # 赋值2 做乘法

获取Series的不重复的元素

s = pd.Series([1, 2, 3, 3, 3, 4])
s2 = s.unique()            # 获取不重复的元素 [1, 2, 3, 4]

Groupby分组

df.groupby('Country')    # 按照Country列进行分组
grouped = df['Country'].groupby(df['sort'])
for name, groupdata in df.groupby('Country'):
    print(name)          # 分组的值
    print(groupdata)     # 获取组内数据

# 按照多列进行分组 获取键值与元素
for (k1, k2), groupdata in df.groupby(['Country', 'sort']):
    print(k1, k2)        
    print(groupdata)
    
dict_data = dict(list(df.groupby(['Country'])))   # 将分组转换成字典
grouped = df.groupby([df.dtypes], axis=1)         # 按照df数据类型进行分组
dict(list(grouped))

对表格数据进行重排操作

data = {'Country': ['China', 'Russia', 'Canada', 'Brazil', 'India'],
       'Capital': ['Beijing', 'Moscow', 'Ottawa', 'Brasilla', 'New Delhi'],
        'sort': [13, 11, 12, 12, 14]
       }
df =pd.DataFrame(data, columns=['Country', 'Capital', 'sort'])
data2 = {'Country': ['China', 'India', 'Brazil', 'China'],
       'Capital': ['Beijing', 'New Delhi', 'Brasilla', 'Peking'],
        'sort': [12, 11, 12, 13]
       }
df1 =pd.DataFrame(data2, columns=['Country', 'Capital', 'sort'])

# 获取df和df1中Country列的相同的所有数据
df2 = pd.merge(df, df1, on='Country')
# 获取df和df1中的数据,按列合并
df2 = pd.merge(df, df1, left_index=True, right_index=True)
df2 = pd.concat([df1, df], ignore_index=True)   # 按行合并df和df1的数据
df2 = df.combine_first(df1)   # 优先获取df中的数据

stack(),unstack(),pivot()
参考博客:https://blog.csdn.net/S_o_l_o_n/article/details/80917211

s1 = df.stack()        # stack()是将原来的列索引转成了最内层的行索引
df = s1.unstack()      # stack()的逆操作,将行索引转换成列索引
pivotdf = df.pivot('Country', 'Capital')  # 针对值对表格数据进行重排

对DataFrame重复行的检查与删除

df.duplicated()                  # 返回是否重复的bool值
df2 = df.drop_duplicates()       # 删除重复的数据
def fun(x):
    return x*2
df2['newCol'] = df2['Country'].map(fun)   # 使用df2的原始列数据去生成新的一列

对nan数据的处理

df2.loc[:, 'insert'] = np.nan
df2 = df2.replace(np.nan, 100)
df2 = df2.replace([-1, np.nan], 100)    # 将所有值为NaN的数替换为100
df.Country = df.Country.map(str.upper)   # 将所有字符大写
df = df.rename(index={0: 'first row'}, columns=str.upper)  # 将第一行的索引值换成 first row, 列索引换成大写
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值