一般情况下,numpy总是和pandas一起出现。如果numpy处理的数据类似于list类型的话,那么pandas处理的数据就类似于dictionary类型。
使用pandas的话,需要将pandas这个第三方包,提前下载到你的python解释器中。
(1)Win + R,输入cmd,然后点击确定
(2)在Windows的终端中输入如下命令,然后回车
pip install pandas
# coding:utf-8
import pandas as pd
import numpy as np
# 通过pandas生成序列
# NAN :not a number,但是类型是float
s = pd.Series([1, 3, 6, np.NAN, 66, 88])
print(s)
# 生成一个日期序列,生成六个数据
dates = pd.date_range('20220822', periods=6)
print(dates)
# 6行4列 ,日期使用的是上面的8.22到8.27
# DataFrame非常类似于Excel表格,最左侧为行名称,最上面是列名称
# index代表行名称,column代表列名称
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df)
print("-" * 50)
# 使用DataFrame的默认行名称和列名称
df1 = pd.DataFrame(np.arange(12).reshape((3, 4)))
print(df1)
# 使用字典作为DateFrame的参数
# 字典的key作为列名,value作为一列中的数值,行数取决于列中最多元素数量
df2 = pd.DataFrame({'A': 1.0, 'B': pd.Timestamp('20210701'),
'C': pd.Categorical(['test1', 'test2', 'test3', 'test4']), 'D': 'ff'})
print(df2)
# 输出数据类型
print(df2.dtypes)
# 打印行名称
print(df2.index)
# 打印列名称
print(df2.columns)
# 打印值
print(df2.values)
# 打印描述信息
print(df2.describe())
# 排序, axis=1指的是列名称;axis=0指的是行名称,ascending=False表示逆序
df2 = df2.sort_index(axis=1, ascending=False)
print(df2)
print("-" * 50)
df2 = df2.sort_index(axis=0, ascending=False)
print(df2)
print("%" * 50)
# 根据C列数值进行排序
df2 = df2.sort_values(by='C')
print(df2)
# 转置
print(df2.T)
# coding:utf-8
import numpy as np
import pandas as pd
"""
pandas从DateFrame中选取一行
"""
# 生成日期序列
dates = pd.date_range('2022.07.01', periods=6)
# 生成DateFrame
df = pd.DataFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A', 'B', 'C', 'D'])
print(df)
# 选取第A列
print(df.A)
print("-" * 50)
print(df['A'])
print("-" * 50)
# 按行切片,左闭右开
print(df[1:3])
print("&" * 50)
# 按行索引名进行切片,左闭右闭
print(df['20220703':'20220705'])
# 根据行标签(行名)进行选取值
print("-" * 50)
print(df.loc['20220701'])
# 选取列标签
print("-" * 50)
# 所有行中的B、C两列
print(df.loc[:, ['B', 'C']])
# 输出指定行中的,指定列
print("-" * 50)
print(df.loc["20220702", ['C', 'D']])
# 根据位置进行筛选
print("-" * 50)
print(df.iloc[3])
print("-" * 50)
print(df.iloc[[1,3,5], 1:3])
# 通过条件进行筛选,通过A列进行筛选,显示所有的信息
print("-" * 50)
print(df[df.A > 8])
# coding:utf-8
import numpy as np
import pandas as pd
"""
在指定位置进行替换值
"""
dates = pd.date_range('20220701', periods=6)
# print(dates)
df = pd.DataFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A', 'B', 'C', 'D'])
print(df)
# 改变指定位置的值
# 通过位置进行改变
df.iloc[2, 2] = 666
print("-" * 50)
print(df)
# 通过标签进行改变
df.loc['20220701', 'B'] = 999
print("-" * 50)
print(df)
df['D'] = np.NAN
print(df)
# 在DataFrame上新加一列
df['E'] = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20220701', periods=6))
print("-" * 50)
print(df)
# 条件判断,只要A列中有大于0的所有行的所有数据全部改变!
# 中括号中,进行的筛选是:筛选A列中的行
df[df.A > 0] = 2222
print(df)
# coding:utf-8
import numpy as np
import pandas as pd
dates = pd.date_range('20220701', periods=6)
# print(dates)
df = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=['A', 'B', 'C', 'D'])
# print(df)
# 改变数据
df.iloc[0, 1] = np.NAN
df.iloc[1, 2] = np.NAN
print("-" * 50)
print(df)
"""
丢弃nan
"""
# 丢弃nan, anis=1表示列方向, how的方式是:
# all的话,就是一整行或者一整列都是nan的话,才进行丢弃
# any的话,只要一行里面或者一列里面有nan,就丢弃整行或者整列
df = df.dropna(axis=1, how='any')
print("-" * 50)
print(df)
"""
替换nan
"""
print(df.fillna(value=0))
# 看看是否缺失数据,
# 在Dataframe的对应元素位置上进行判断,如果缺失显示True;如果不缺失显示False
print(df.isnull())
# 看看df中是否有NaN
print("-" * 50)
print(np.any(df.isnull()) == True)
import numpy as np
import pandas as pd
"""
用pandas导入导出数据
"""
# 读取数据,可以读取各自格式的数据。比如:read_csv、read_excel、read_html
data = pd.read_csv("AAH691(2).csv", encoding='gb18030')
print(data)
# 保存成pickle格式的文件,也可以保存成其他格式的问题,比如csv、html等。与读取一一对应
# 保存数据
data.to_pickle('test.pickle')
# coding:utf-8
import numpy as np
import pandas as pd
"""
pandas中的合并
"""
# 创建数据框架
df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame(np.ones((3, 4))*1, columns=['a', 'b', 'c', 'd'])
df3 = pd.DataFrame(np.ones((3, 4))*2, columns=['a', 'b', 'c', 'd'])
print("-" * 50)
print(df1)
print("-" * 50)
print(df2)
print("-" * 50)
print(df3)
# 使用函数,在竖直方向进行合并, axis为0时,表示竖直方向的合并
print("-" * 50)
# ignore_index=True表示对合并之后的数据进行重新排序
res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)
print(res)
# 使用函数,在竖直方向进行合并, axis为0时,表示竖直方向的合并
# axis为1时,表示水平方向的合并
print("-" * 50)
# ignore_index=True表示对合并之后的数据进行重新排序
res = pd.concat([df1, df2, df3], axis=1)
print(res)
print("-" * 50)
df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd'], index=[1, 2, 3])
df2 = pd.DataFrame(np.ones((3, 4))*2, columns=['b', 'c', 'd', 'e'], index=[2, 3, 4])
print(df1)
print("-" * 50)
print(df2)
# 使用concat进行合并
# 默认join是outer; 也可以使用inner
# inner合并相同列;outer全部并起来,没有的列用NaN填充
# ignore_index使得合并之后,顺序井然
# inner类似于交集,outer类似于并集
res = pd.concat([df1, df2], join="outer", ignore_index=True)
print("-" * 50)
print(res)
# 使用concat进行合并
# 默认join是outer; 也可以使用inner
# inner合并相同列;outer全部并起来,没有的列用NaN填充
# ignore_index使得合并之后,顺序井然
# inner类似于交集,outer类似于并集
res = pd.concat([df1, df2], join="inner", ignore_index=True)
print("-" * 50)
print(res)
"""
append的使用,默认数据框架df进行纵向合并,添加到最下面
"""
df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd'], index=[1, 2, 3])
df2 = pd.DataFrame(np.ones((3, 4))*2, columns=['a', 'b', 'c', 'd'], index=[2, 3, 4])
df3 = pd.DataFrame(np.ones((3, 4))*3, columns=['a', 'b', 'c', 'd'], index=[2, 3, 4])
print("-" * 50)
print(df1)
print("-" * 50)
print(df2)
print("-" * 50)
print(df3)
print("-" * 50)
# 参数ignore_index为True是为了让索引有序!!!
res = df1.append([df2, df3], ignore_index=True)
print(res)
# 添加序列
s1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(s1)
print("-" * 50)
res = df1.append(s1, ignore_index=True)
print(res)
# coding:utf-8
import numpy as np
import pandas as pd
"""
merge的使用
"""
# 可以将dataframe的格式理解成数据库中的表
left = pd.DataFrame({'key':['K0', 'K1', 'K2', 'K3'],
'A':['A0', 'A1', 'A2', 'A3'],
'B':['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key':['K0', 'K1', 'K2', 'K3'],
'C':['C0', 'C1', 'C2', 'C3'],
'D':['D0', 'D1', 'D2', 'D3']})
print(left)
print("-" * 50)
print(right)
print("-" * 50)
# 通过merge进行合并
# 基于key列进行合并
res = pd.merge(left, right, on='key')
print(res)
print("-" * 50)
left = pd.DataFrame({'key1':['K0', 'K0', 'K1', 'K2'],
'key2':['K0', 'K1', 'K0', 'K1'],
'A':['A0', 'A1', 'A2', 'A3'],
'B':['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1':['K0', 'K1', 'K1', 'K2'],
'key2':['K0', 'K0', 'K0', 'K0'],
'C':['C0', 'C1', 'C2', 'C3'],
'D':['D0', 'D1', 'D2', 'D3']})
print(left)
print("-" * 50)
print(right)
# 使用merge进行合并,默认合并方式是inner,去掉
# how四种方式:inner 、outer 、left 、right
print("-" * 50)
res = pd.merge(left, right, on=['key1', 'key2'], how="inner")
print(res)
# 使用merge进行合并,默认合并方式是inner,去掉
# how四种方式:inner 、outer 、left 、right
print("-" * 50)
res = pd.merge(left, right, on=['key1', 'key2'], how="outer")
print(res)
# how四种方式:inner 、outer 、left 、right
print("-" * 50)
res = pd.merge(left, right, on=['key1', 'key2'], how="right")
print(res)
# how四种方式:inner 、outer 、left 、right
print("-" * 50)
res = pd.merge(left, right, on=['key1', 'key2'], how="left")
print(res)
df1 = pd.DataFrame({'col1':[0, 1], 'col_left':['a', 'b']})
df2 = pd.DataFrame({'col1':[1, 2, 2], 'col_right':[2, 2, 2]})
print("-" * 50)
print(df1)
print("-" * 50)
print(df2)
# indicator参数表示显示合并方式,indicator_column为显示合并方式列的列名
res = pd.merge(df1, df2, on='col1', how='outer', indicator="indicator_column")
print("-" * 50)
print(res)
left = pd.DataFrame({'A':['A0', 'A1', 'A2'],
'B':['B0', 'B1', 'B2']},
index=['K0', 'K1', 'K2'])
right = pd.DataFrame({'C':['C0', 'C1', 'C2'],
'D':['D0', 'D1', 'D2']},
index=['K0', 'K2', 'K3'])
print("-" * 50)
print(left)
print("-" * 50)
print(right)
print("-" * 50)
# 这里的how参数outer指的是,合并左侧索引和右侧索引
res = pd.merge(left, right, left_index=True, right_index=True, how='outer')
print(res)
boys = pd.DataFrame({'k':['K0', 'K1', 'K2'], 'age':[1, 2, 3]})
girls = pd.DataFrame({'k':['K0', 'K0', 'K3'], 'age':[4, 5, 6]})
print("-" * 50)
print(boys)
print("-" * 50)
print(girls)
# suffixes参数合并之后,重命名列名,在原来列表后面进行修改,以显示不同
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='outer')
print("-" * 50)
print(res)
# coding:utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.Series(np.random.randn(1000), index=np.arange(1000))
# 对数据进行累加
data = data.cumsum()
data.plot()
plt.show()
# 使用dataframe
# 4代表生成4组数据
data = pd.DataFrame(np.random.randn(1000, 4),
index=np.arange(1000),
columns=["A", "B", "C", "D"])
# 进行累计
data = data.cumsum()
# print(data.head(5))
data.plot()
# 展示
plt.show()
ax = data.plot.scatter(x='A', y='B', color='DarkBlue', label='Class 1')
data.plot.scatter(x='A', y='C', color='DarkGreen', label='Class 2', ax=ax)
plt.show()