数据分析基础:Pandas的操作-Python

Pandas的两种数据类型:Series和DataFrame
有关他们的创建、索引、切片等其他操作

Series对象操作


Series对象的创建

a = np.array([1,2,3])
# 使用Series对象为a数组添加索引
b = pd.Series(a,index=['A','B','C'])
# A    1
# B    2
# C    3
# dtype: int32

# 如果参数是列表,也可以创建Series对象
c = pd.Series(['A','B','C'])
# 0    A
# 1    B
# 2    C
# dtype: object

# 字典也可以作为参数传入
d = pd.Series({'A':1,'B':2,'C':3})
# A    1
# B    2
# C    3
# dtype: int64

d.index     # 获取d的索引  Index(['A', 'B', 'C'], dtype='object')
d.values    # 获取d的值     [1 2 3]

Series对象的索引

h = pd.Series({'A':1,'B':2,'C':3,'D':4})

h['A']          # 输出 1
'A' in h        # True
'E' in h        # False
h.keys()        # Index(['A', 'B', 'C', 'D'], dtype='object')
list(h.items()) # [('A', 1), ('B', 2), ('C', 3), ('D', 4)]
h[['A','B']]
# A    1
# B    2
# dtype: int64
h[h > 2]
# C    3
# D    4
# dtype: int64

Series对象的切片

## Series对象切片
h = pd.Series({'A':1,'B':2,'C':3,'D':4})

h['B':'C']
# B    2
# C    3
# dtype: int64

h[0:2] # [0,2) 前包含后不包含
# A    1
# B    2
# dtype: int64

# 当标签索引也是整数的情况

i = pd.Series(['num1','num2','num3','num4'],index=[1,3,5,7])
# 1    num1
# 3    num2
# 5    num3
# 7    num4
# dtype: object

i[1] # num1 直接输入整数时按照标签索引
i[1:3]  # 切片时依旧按照位置索引切片.因此,index最好不要用整数
# 3    num2
# 5    num3
# dtype: object

# 如果index是整数(比如上述的i),
# 那么最好是用下列两种方式来索引

# 指定使用位置索引
i.iloc[0]   # num1
i.iloc[1:3] # [1,3)
# 3    num2
# 5    num3
# dtype: object

# 指定使用标签索引
i.loc[7]    # num4
i.loc[1:7]
# 1    num1
# 3    num2
# 5    num3
# 7    num4
# dtype: object

DataFrame对象的操作


DataFrame对象的创建

# 创建DataFrame对象(二维表格)
e = pd.DataFrame([[10,20,30],[40,50,60]])
#     0   1   2  ← 这里的0,1,2叫列索引(Columns)
# 0  10  20  30
# 1  40  50  60
# ↑
# 这个0,1叫行索引(index),用整数表示的叫做"位置索引"

# 我们还可以指定特殊的行索引(行索引标签)
e.index = ['A','B']
#     0   1   2
# A  10  20  30
# B  40  50  60

# 同样的,也可以指定列索引标签
e.columns = ['C','D','E']

# 我们也可以直接得到上述结果
f = pd.DataFrame([[10,20,30],[40,50,60]],
                  index=['A','B'],columns=['C','D','E'])
#     C   D   E
# A  10  20  30
# B  40  50  60

# 也可以通过传入字典的方式一步到位
g = pd.DataFrame({'C':[10,40],'D':[20,50],'E':[30,60]},
                  index=['A','B'])
#     C   D   E
# A  10  20  30
# B  40  50  60

DataFrame对象的索引

j = pd.DataFrame({'A':[10,20,30,40,50],'B':[60,70,80,90,100]},
                  index=['C','D','E','F','G'])
#     A    B
# C  10   60
# D  20   70
# E  30   80
# F  40   90
# G  50  100

# j['C']    # 会报错,不能直接使用行索引
j['A']      # 这样就不会报错,应该使用列索引
# C    10
# D    20
# E    30
# F    40
# G    50
# Name: A, dtype: int64
type(j['A'])    # 返回一个Series对象 <class 'pandas.core.series.Series'>

# 如果想要使用行索引,则需要使用loc[]来操作
j.loc['C']
# A    10
# B    60
# Name: C, dtype: int64

# 如果要进行逻辑判断,则需要明确是哪一行(列)

j.loc[j['A']>=30]   # 返回A列中大于等于30元素所在的行
#     A    B
# E  30   80
# F  40   90
# G  50  100

j.values   # 将DataFrame对象作为列表返回
# [[ 10  60]
#  [ 20  70]
#  [ 30  80]
#  [ 40  90]
#  [ 50 100]]

DataFrame对象的切片

j = pd.DataFrame({'A':[10,20,30,40,50],'B':[60,70,80,90,100]},
                  index=['C','D','E','F','G'])
#     A    B
# C  10   60
# D  20   70
# E  30   80
# F  40   90
# G  50  100

j.loc['D':'F']  # 按照列索引切片
#     A   B
# D  20  70
# E  30  80
# F  40  90

j['Z'] = [110,120,130,140,150]
# 添加一列后的j
#     A    B    Z
# C  10   60  110
# D  20   70  120
# E  30   80  130
# F  40   90  140
# G  50  100  150
j.loc[:,'B':'Z']    # ":"代表取所有的行,从B到Z列切片
#      B    Z
# C   60  110
# D   70  120
# E   80  130
# F   90  140
# G  100  150
j.loc[:,['A','Z']]  # 传入列表,指定所要取的列
#     A    Z
# C  10  110
# D  20  120
# E  30  130
# F  40  140
# G  50  150
j.loc['D','A':'B']  # 只取'D'行的'A'到'B'列元素
# A    20
# B    70
# Name: D, dtype: int64

从文件中读取数据


我们可以利用pandas将表格文件中的数据给提取出来,转换成DataFrame对象来使用
下面我们以CSV文件为例,来演示读取文件的基本操作

  • CSV文件:是以纯文本形式存储的表格数据。其中,记录之间以换行符分隔,字段之间用逗号或制表符分隔。

  • CSV文件可以由EXCEL文件转换而来。

我们在当前目录下创建一个CSV文件:

test.csv

Name,Chinese,Math,English
Amy,117,120,130
Tom,113,134,110
Candy,94,140,122

再看一下pandas是如何操作这个文件的:

# 读取当前目录的csv文件
a = pd.read_csv('./test.csv')
type(a) # 此时,变量a就变成了一个DataFrame对象 <class 'pandas.core.frame.DataFrame'>

a
#     Name  Chinese  Math  English
# 0    Amy      117   120      130
# 1    Tom      113   134      110
# 2  Candy       94   140      122

# index_col用来指定某一列作为行索引
b = pd.read_csv('./test.csv',index_col=[0])
#        Chinese  Math  English
# Name                         
# Amy        117   120      130
# Tom        113   134      110
# Candy       94   140      122

# names参数用来指定DataFrame对象的列索引
c = pd.read_csv('./test.csv',names=['YuWen','ShuXue','YingYu'])
#          YuWen ShuXue   YingYu
# Name   Chinese   Math  English
# Amy        117    120      130
# Tom        113    134      110
# Candy       94    140      122

# skiprows参数用于省略指定的行
d = pd.read_csv('./test.csv',names=['YuWen','ShuXue','YingYu'],skiprows=[0])
#        YuWen  ShuXue  YingYu
# Amy      117     120     130
# Tom      113     134     110
# Candy     94     140     122

猜你喜欢

转载自blog.csdn.net/qq_15989473/article/details/107594936