数据分析学习笔记(1)

  • Post author:
  • Post category:其他




AutoLeaders算法组——numpy&pandas库学习笔记



numpy库



一、创建numpy库和创建数组



1.导入numpy库并命名为np

import numpy as np



2.创建一维数组

np.array([3, 6, 9])



3.创建二维数组

np.array([(3, 6, 9),(2, 4, 7)])



4.创建全为0或1的三维数组

np.zeros(2, 3, 4)
np.ones(2, 3, 4)


(数组个数, 每个数组的行数, 列数)



5.创建单位矩阵

np.eye(3)##创建一个三阶的单位矩阵

注意:np.eye(

X

),

X

为单位矩阵的阶数



二、简单运算



1.tile

print(a)

[(1, 2), (4, 6)]

np.tile(a, (1, 2))#把a转换成一行两列

[[1 2 1 2]

[4 6 4 6]]



2.矩阵乘法

A = np.array([[1, 2],
              [3, 4]])
B = np.array([[1, 2],
              [3, 4]])
np.dot(A, B)

[[ 7 10]

[15 22]]



3.矩阵求逆

A = np.array([[1, 2],
              [3, 4]])
np.linalg.inv(A)

[[-2. 1. ]

[ 1.5 -0.5]]



4.广播

a = np.array([[1, 2, 3],
             [4, 5, 6],
             [6, 6, 6]])
b = np.array([1, 2, 3])
a + b

[[2 4 6]

[5 7 9]

[7 8 9]]



5.矩阵合并

a = np.array([1, 2, 3])
b = np.array([1, 2, 3])
c = np.vstack((a, b))#上下合并 vertical stack
d = np.hstack((a, b))#左右合并 horizontal stack
print(c, "\n", d)

[[1 2 3]

[1 2 3]]

[1 2 3 1 2 3]



6.array的分割

a = np.arange(1, 13).reshape(3, 4)
b = np.split(a, 3, axis=0)##axis=0时,横向分割;axis=1时,纵向分割
print(a)
print(b)

[[ 1 2 3 4]

[ 5 6 7 8]

[ 9 10 11 12]]

[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]



pandas库



一、生成数据表



1.导入pandas库

import numpy as np
import pandas as pd



2.csv或者xlsx文件的导入和导出

df = pd.read_csv('name.csv')#导入csv文件
df = pd.read_excel('name.xlsx')#导入xlsx文件
df_inner.to_csv('name1.csv')#导出csv文件
df_inner.to_xlsx('name1.xlsx',sheet_name='name2_cc')#导出xlsx文件



3.用字典创建数据表

dates = pd.date_range('20220101', periods=3)
df = pd.DataFrame({
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [4, 5, 6]
}, index=dates, columns=['a', 'b', 'c'])
print(df)

​ a b c

2022-01-01 1 4 4

2022-01-02 2 5 5

2022-01-03 3 6 6



二、选择数据



1.查看某列的数据

print(df['a'])
print(df[0,2])
print(df['20220101','20220103'])#三种形式得到的结果相同



2.查看某行的数据

print(df.loc['20220101'])
print(df.iloc[0])#输出第一行
print(df[df.a >= 2])#查看a大于等于2的行



3.查看某列数据

print(df.loc[:, ['a','b']])
print(df.iloc[:, 0:2])



三、设置值



1.对单个值或一行进行更改

df.iloc[1,1] = 123
df.loc['20220102', 'b']=123#以上两种方式更改效果相同
df[df.a>1] = 0#把df里面a>1的行全部置0
df.a[df.a>1] = 0#把df里面a>1行的a值置0



2.增加一列

df['d'] = np.nan
df['e'] = pd.Series([1, 2, 3], index=pd.date_range('20220101', periods=3))
print(df)



3.删除一列

df.drop(labels=['a', 'b'], axis=1)#删除a,b列



四、处理丢失数据



1.删除缺失行

df.dropna(axis = 0,how = 'any')#丢掉出现一个或以上的NaN的行,若how='all',则是丢掉全部为NaN的行



2.查找缺失值

df.isnull()



3.填充缺失值

df.fillna(value=1)#用1填充缺失值



五、合并DataFrame



1.append

df1 = pd.DataFrame(np.ones((3, 3))*1, index=[0, 1, 2], columns=['a', 'b', 'c'])
df2 = pd.DataFrame(np.ones((3, 3))*2, index=[0, 1, 2], columns=['a', 'b', 'c'])
df3 = df1.append(df2, ignore_index=True)
print(df1)
print(df2)
print(df3)

image-20221023145137347



2.concat

df1 = pd.DataFrame(np.ones((3, 3))*1, index=[0, 1, 2], columns=['a', 'b', 'c'])
df2 = pd.DataFrame(np.ones((3, 3))*2, index=[0, 1, 2], columns=['b', 'c', 'd'])
df3 = pd.concat([df1, df2], ignore_index=True, join='outer')#join='outer'取并集,#join='inner'取交集

image-20221023145649763



3.merge


按列合并

left = pd.DataFrame({
    'key': ['K1', 'K2', 'K3'],
    'a': ['a0', 'a1', 'a2'],
    'b': ['b0', 'b1', 'b2']
})
right = pd.DataFrame({
    'key': ['K1', 'K2', 'K3'],
    'c': ['c0', 'c1', 'c2'],
    'd': ['d0', 'd1', 'd2']
})
df = pd.merge(left, right, on='key')#按key合并
print(df)

image-20221023152204421

df = pd.merge(left, right, on='key', how="inner")

image-20221023152453302

df = pd.merge(left, right, on='key', how="outer")

image-20221023152516489


按行合并

left = pd.DataFrame({
    'a': ['a0', 'a1', ],
    'b': ['b0', 'b1', ]
}, index=['K1', 'K2'])
right = pd.DataFrame({
    'c': ['c0', 'c1', 'c2'],
    'd': ['d0', 'd1', 'd2']
}, index=['K1', 'K2', 'K3'])
df = pd.merge(left, right, left_index=True, right_index=True, how='outer')
print(left)
print(right)
print(df)

image-20221023153658620



六、对列的简单运算

form = pd.DataFrame({
    'a': [1, 2],
    'b': [3, 4]
}, index=['K1', 'K2'])#一张简单的DataFrame
print(form.a.sum())#总和
print(form.a.max())#最大值
print(form.a.min())#最小值
print(form.a.mean())#平均值

image-20221023155018843



版权声明:本文为weixin_65446588原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。