美文网首页
pandas 之3:十分钟入门

pandas 之3:十分钟入门

作者: 夕颜00 | 来源:发表于2020-06-01 16:59 被阅读0次

1、
学习原网址:https://www.pypandas.cn/docs/getting_started/10min.html

2、


import numpy as np
import pandas as pd

# 生成对象
s = pd.Series([1, 3, 5, np.nan, 6, 8])
# print(s)
dates = pd.date_range('20130101', periods=6)
# print(dates)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# print(df)
df2 = pd.DataFrame({'A': 1.,
                    'B': pd.Timestamp('20130102'),
                    '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'})
print(df2.dtypes)  #DataFrame 的列有不同数据类型

# 查看数据
print(df.head()) #查看前五行
print(df.tail(3)) ##看后三行
print(df.index)  #显示索引
print(df.columns) #显示列名
print(df2.describe()) #可以快速查看数据的统计摘要,mean/srd/min/max/25%
print(df.T) #转置数据
print(df.sort_index(axis=1,ascending=False)) #按轴排序
print(df.sort_values(by="B"))    #按B列值排序

# 选择
print(df["A"])
print(df[0:3])  #查看前3行
print(df['20130102':'20130104'])  #查看索引为20130102~20130104的行

# 按标签选择
print(df.loc[dates[0]])  ##查看第1行
print(df.loc[:,["A","B"]]) #查看AB列
print(df.loc['20130102', ['A', 'B']])
df.loc[dates[0], 'A']
df.at[dates[0], 'A']   ##同上

# 按位置选择
print(df.iloc[3])       ##查看第4行
print(df.iloc[3:5,0:2])  ##第4、5行,第一第二列
print(df.iloc[[1, 2, 4], [0, 2]]) ##第2、3、5行。第1、3列
print(df.iloc[1, 1])  ##第2行第2列
df.iat[1, 1]           ##同上

# 布尔索引
print(df[df.A > 0])   ##显示A列大于0的行
print(df[df >0])   ##显示表中大于0的值,小于0替换成NaN

# 用 isin() 筛选
df2 = df.copy()
df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
print(df2)
print(df2[df2["E"].isin(["two","four"])])  ##显示E列为two,four的行

# 按标签赋值:
df.at[dates[0],"A"] = 0  ##第1行的A列,赋值
# 按位置赋值
df.iat[0,1] = 0    ##第1行第2列

# 用 where 条件赋值:
df2 = df.copy()
df2[df2 > 0] = -df2  ##将正数取反
print(df2)

# 缺失值
# Pandas 主要用 np.nan 表示缺失数据。 计算时,默认不包含空值.
# 重建索引(reindex)可以更改、添加、删除指定轴的索引,并返回数据副本,即不更改原数据。
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1.loc[dates[0]:dates[1], 'E'] = 1
print(df1)

df1.dropna(how='any')  # #删除所有含缺失值的行
df1.fillna(value=5)  ##填充缺失值,将NaN都替换成5
pd.isna(df1)  #提取 nan 值的布尔掩码,每个位置标注False ,True

#使用dropna删除某列为空的行
df1 = pd.read_excel('moviedata.xlsx')
df1 = df1.dropna(subset=["豆瓣评分","评分人数"])   #删除指定列空值的行

# 运算
df.mean() #对每列求平均值
df.mean(1) #对每行求平均值

s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2)
print(s)
print(df.sub(s, axis='index'))

# Apply 函数
print(df.apply(np.cumsum))
print(df.apply(lambda x: x.max() - x.min()))  #每列最大值-最小值,每列给出一个差值

# 字符串方法
s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
s.str.lower()  ##将大写字母变成小写

# 结合(Concat)
df = pd.DataFrame(np.random.randn(10, 4))
print(df)
pieces = [df[:3], df[3:7], df[7:]] # 分解为多组
pd.concat(pieces)   ##按行合并

# 连接(join)
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
pd.merge(left, right, on='key')   ##依据key列名,进行行合并

# 追加(Append)
df = pd.DataFrame(np.random.randn(8, 4), columns=['A', 'B', 'C', 'D'])
print(df)
s = df.iloc[3] #取第三行
print(df.append(s,ignore_index=True)) ##在最后一行追加上第三行

##分组(Grouping)
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
                         'foo', 'bar', 'foo', 'foo'],
                   'B': ['one', 'one', 'two', 'three',
                         'two', 'two', 'one', 'three'],
                   'C': np.random.randn(8),
                   'D': np.random.randn(8)})
print(df)
print(df.groupby("A").sum())   ##对A列分成两组,统计C/D的列的和
print(df.groupby(['A', 'B']).sum())



相关文章

网友评论

      本文标题:pandas 之3:十分钟入门

      本文链接:https://www.haomeiwen.com/subject/matpzhtx.html