Python常用工具库-实验(6个lab)-Pandas

Pandas

Series

import pandas as pd
import numpy as np
s = pd.Series([1, 3, 5, np.nan, 6, 8])  # nan缺失值

data = np.array(['a', 'b', 'c', 'd'])
s = pd.Series(data)
print(s)

# 字典(dict)可以作为输入传递,如果没有指定索引,则按排序顺序取得字典键以构造索引。如果传递了索引,索引中与标签对应的数据中的值将被取出。"
data1 = {'a': 0., 'b': 1., 'c': 2.}
s = pd.Series(data1)
print(s)

DataFrame

import pandas as pd
import numpy as np

# 步骤一 创建DataFrame
print("*********步骤1*********\n")
dates = pd.date_range('20200101', periods=7)  # 生成作为行索引的时间序列
print(dates)
print("--"*16)
# 使用随机生成的 numpy数组作为数据,传入列索引ABCD
df = pd.DataFrame(np.random.randn(7, 4), index=dates, columns=list('ABCD'))
print(df)

df1 = pd.DataFrame({'A': 1.,
                    'B': pd.Timestamp('20200102'),           # Timestamp方法生成时间戳
                    'C': pd.Series(1, index=list(range(4)), dtype='float32'),
                    'D': np.array([3] * 4, dtype='int32'),
                    # Categoricals是 pandas的一种数据类型,对应着被统计的变量,
                    # categorical类型的数据可以具有特定的顺序,这个顺序是创建时手工设定的,是静态的
                    'E': pd.Categorical(["test", "train", "test", "train"]),
                    'F': 'foo'})
print(df1)

# 步骤二 查看DataFrame中的数据
print("*********步骤2*********\n")
data2 = np.arange(30).reshape(6, 5)  # 生成一个维度(6,5)的数组
df2 = pd.DataFrame(data2, index=['a', 'b ', 'c', 'd', 'e', 'f'], columns=[
                   'A', 'B', 'C', 'D', 'E'])
# 创建DataFrame
print(df2)
print("--" * 10)
# DataFrame.head(n=5):显示前n条数据。n表示显示的数据量。
print(df2.head())
print("--" * 10)
# DataFrame.tail(n=5):显示底部数据,和 head的参数一样
print(df2.tail(3))

print("index is :")
print(df2.index)  # 输出行索引
print("columns is :")
print(df2.columns)  # 输出列索引
print("values is :")
print(df2.values)  # 输出数据

# DataFrame.loc:按标签或布尔数组访问一组行和列
print(df2.loc['a':'f':2, 'A'])  # 获取A列,索引为a到f(包括f)中的数据,步长为2

print(df2.describe())  # describe描述了数据的详细信息

# 步骤三 DataFrame数据的操作
print("*********步骤3*********\n")
data3 = np.arange(30).reshape(6, 5)
df3 = pd.DataFrame(data3, index=['a', 'b', ' c', 'd', 'e', 'f'], columns=[
                   'A', 'B', 'C', 'D', 'E'])
a = df3.drop(['a'], axis=0)  # axis=0时删除指定的行
b = df3.drop(['A'], axis=1)  # axis=1时,删除指定的列
print('-------原始数据df-----')
print(df3)
print('-------删除行---------')
print(a)
print(' -------删除列---------')
print(b)

c = b.append(a)
print(b)
print('------合并后产生的新数据------')
print(c)

b.reset_index(inplace=True)  # inplace为 true时会修改原始数据,为False 会产生新的数据
print(b)

# 步骤四 iteritems方法获取数据
print("*********步骤4*********\n")
# 返回一个由元组组成的可迭代对象。每个元组由DataFrame中列名和所对应的Series组成。
df4 = pd.DataFrame(np.random.randn(4, 3), columns=['col1 ', 'col2', 'col3'])
print("df4:", df4)
i = 1
# DataFrame.iteritems():返回一个包含列名称和内容为系列的元组
for s in df4.iteritems():  # 对iteritems产生的元组进行遍历
    print("第%d列数据%s" % (i, s))
    i += 1

# 步骤五 Pandas统计函数
print("*********步骤5*********\n")
s = pd.Series([1, 2, 3, 4, 5, 4])
print(s.pct_change())
df5 = pd.DataFrame(np.random.randn(5, 2))
print(df5.pct_change())

s1 = pd.Series(np.random.randn(10))
s2 = pd.Series(np.random.randn(10))
print("s1:", s1)
print("s2:", s2)
# Series.cov (min_periods = None):计算列的协方差,不包括NA / null值。min_periods 表示每个列对所需的最小观测值数
print("协方差:", s1.cov(s2))

frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
print(frame['a'].cov(frame['b']))  # 计算DataFrame之间的协方差
print(frame.cov())

s3 = pd.Series(np.random.randn(5), index=list('abcde'))  # 生成一个Series对象
s3['d'] = s3['b']  # 另两个数据相等
print(s3.rank())  # 数据排名,根据数据大小返回名次

# 步骤六 Pandas中确实数据的简单操作
print("*********步骤6*********\n")
df6 = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
                                                 'h'], columns=['one', 'two', 'three'])
# 使用reindex方法设置新的索引,多出的索引对应的数据使用NaN填充
df6 = df6.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df6)

df7 = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
                                                 'h'], columns=['one', 'two', 'three'])
df7 = df7.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
# reindex方法可以重置索引,多余的索引会被填充 NaN
print(df7['one'].isnull())  # isnull方法可以检查数据中是否有空值

df8 = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
                                                 'h'], columns=['one', 'two', ' three'])
df8 = df8.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df8)
print(df8['one'].sum())

df9 = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'], columns=['one',
                                                                          'two', 'three'])
df9 = df9.reindex(['a', 'b', 'c'])
print(df9)
print("NaN replaced with '0':")
# DataFrame.fillna (value = None,method = None,axis = None,inplace = False,limit = None,downcast=None,** kwargs ):使用指定的方法和数据填充NA/NaN值。Value 表示填充数据,method表示填充方法('backfill','bfill','pad','ffill',None)。
print(df9.fillna(0))  # fillna方法可以使用指定数据来填充NaN

df10 = pd.DataFrame(np.random.randn(5, 3), index=[
                    'a', 'c ', 'e', 'f', 'h'], columns=['one', 'two', 'three'])
df10 = df10.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df10)
print("---"*10)
print(df10.dropna())  # 丢弃全部值为NaN的行,可以设置参数 how=all来删除所有存在NaN值的行

你可能感兴趣的:(python高级程序设计,python)