文章目录
- 写在前头:本篇博客写作的目的是为了记录我学习过程中遇到的所有的关于pandas的使用方法,bug等,将本博客作一个pandas万金油博客,希冀遇到所有的问题,查这一篇博客就足够了(从目录入手,查看自己需要查阅到部分)。首先本文对pandas.DataFrame的所有增删查改操作进行了介绍。然后接下来会记录各种各样的pandas高级操作,工作中遇到的问题和解决办法。
Pandas模块的数据结构主要有两种:
- 1.DataFrame
- 2.Series
零、pandas print() 完整打印输出方法
import pandas as pd
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
一、pd.DataFrame()
1、DataFrame的创建与保存
(1)从excel、csv导入
- 从excel导入
train = pandas.read_excel("./1.xls")
df = pandas.DataFrame(train)
- 从csv导入
train = pandas.read_csv("./1.csv")
df = pandas.DataFrame(train)
(2) 手动创建
# coding=utf-8
import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(12, 24).reshape((3,4)), columns=["W","X","Y","Z"])
print(df)
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
'''
(3) 保存为excel、csv
- 保存为excel
df.to_excel("./1.xls", columns=file_column)
- 保存为csv
df.to_csv("./1.csv", columns=file_column)
2、DataFrame的增加
df
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
'''
(1) 在pandas.DataFrame中添加一行
import random
df.loc[3] = [random.randint(-1,1) for i in range(4)]
df
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
3 -1 0 -1 -1
'''
(2) 在pandas.DataFrame中添加多行
import random
df = pd.DataFrame(columns=('lib', 'qty1', 'qty2')) # 生成空的pandas表
for i in range(5): # 插入一行<span id="transmark" style="display:none;"></span>
df.loc[i] = [random.randint(-1, 1) for n in range(3)]
print(df)
'''
lib qty1 qty2
0 1 0 1
1 0 0 1
2 0 1 -1
3 1 -1 1
4 0 1 -1
'''
3、DataFrame的删除
df
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
'''
(1) 在pandas.DataFrame中删除一行或多行
df.drop([0,1])
'''
W X Y Z
2 20 21 22 23
'''
(2) 在pandas.DataFrame中删除一列或多列
- 下面两种方法等价
df.drop(['W','Z'], axis=1)
'''
X Y
0 13 14
1 17 18
2 21 22
'''
df.drop(columns=['W', 'Z'])
'''
X Y
0 13 14
1 17 18
2 21 22
'''
4、DataFrame的查看
df
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
'''
(1) pd.head()
- 用于查看dataframe的前几行,n默认为5
df.head(n=1)
'''
W X Y Z
0 12 13 14 15
'''
(2) 使用切片,多行提取
df[0:3]
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
'''
(3) 使用表达式取到某些条件的行
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
'''
df[df.Z>15]
'''
W X Y Z
1 16 17 18 19
2 20 21 22 23
'''
(4) 使用df.loc()进行行选取,使用索引名字
df.loc[1]
'''
W 16
X 17
Y 18
Z 19
Name: 1, dtype: int32
'''
df.loc[1:3]
'''
W X Y Z
1 16 17 18 19
2 20 21 22 23
'''
(5) 使用df.iloc()进行单行、单独元素、多行提取
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
'''
- 使用df.iloc()进行单行、多行选取
df.iloc[1,]
'''
W 16
X 17
Y 18
Z 19
Name: 1, dtype: int32
'''
- 使用df.iloc()进行单独元素提取
df.iloc[1,1]
'''
17
'''
- 使用df.iloc()进行多行选取
df.iloc[1:3,]
'''
W X Y Z
1 16 17 18 19
2 20 21 22 23
'''
(6) 提取出DataFrame中的一列
df.to_dict()["W"]
'''
{0: 12, 1: 16, 2: 20}
'''
5、DataFrame的修改
df
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
'''
(1) 在pandas.DataFrame中修改一行
import random
df.loc[2] = [random.randint(-1,1) for i in range(4)]
df
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 -1 1 -1 0
'''
(2) 在pandas.DataFrame中修改多行
import random
df = pd.DataFrame(np.arange(12, 24).reshape((3,4)), columns=["W","X","Y","Z"])
for i in [1,2]:
df.loc[i] = [random.randint(-1,1) for i in range(4)]
print(df)
'''
W X Y Z
0 12 13 14 15
1 -1 -1 0 1
2 0 1 0 0
'''
6、DataFrame获取excel的表头
- DataFrame获取excel的表头,用以创建新的相同表头的表
# coding=utf-8
import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(12, 24).reshape((3,4)), columns=["W","X","Y","Z"])
print(df1)
'''
W X Y Z
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
'''
--------------------------------------------
# 获取表头
file_column = [x for x in df]
print(file_column)
'''
['W', 'X', 'Y', 'Z']
'''
7、DataFrame中将空字符串替换为0
- 此处是为了解决有时候表格有空值,再处理数据等一些操作时,会带来一定的不便,因此,介绍了这一种将空值替换为任意字符的方法,此处以0举例。
- 注意,他的操作对象只能是建好的表格,而不能是未赋值的表格。
df.fillna(0)
二、pd.Series()
- Series 是一维数组,基于Numpy的ndarray 结构
Series([data, index, dtype, name, copy, …])
# One-dimensional ndarray with axis labels (including time series).
1、Series 创建
import pandas as pd
import numpy as np
(1) pd.Series([list],index=[list])
pd.Series([list],index=[list]) 参数为list ,index为可选参数,若不填写则默认为index从0开始
obj = pd.Series([4, 7, -5, 3, 7, np.nan])
obj
输出结果为:
0 4.0
1 7.0
2 -5.0
3 3.0
4 7.0
5 NaN
dtype: float64
指定index
obj = pd.Series([4, 7, -5, 3, 7, np.nan], [4,3,"a",1,0,"hello"])
obj
输出结果为:
4 4.0
3 7.0
a -5.0
1 3.0
0 7.0
hello NaN
dtype: float64
(2) pd.Series(np.arange())
pd.Series(np.arange())
arr = np.arange(6)
s = pd.Series(arr)
s
输出结果为:
0 0
1 1
2 2
3 3
4 4
5 5
dtype: int32
(3) pd.Series({dict})
pd.Series({dict})
d = {'a':10,'b':20,'c':30,'d':40,'e':50}
s = pd.Series(d)
s
输出结果为:
a 10
b 20
c 30
d 40
e 50
dtype: int64