Python数据分析——pandas数据结构(DataFrame)

一、pandas数据结构–DataFrame

  • DataFrame 是表格型的数据结构,每列值的数据类型可以不同,也可以相同
    DataFrame 常用于二维数据。
    DataFrame 的属性: values,index,columns,dtypes
    Python数据分析——pandas数据结构(DataFrame)

二、创建DataFrame对象

1.格式: pandas.DataFrame(data[,index[,columns]])

  • 参数说明:
    data:是输入给DataFrame构造器的数据 index:是DataFrame对象中行索引的标签。 columns:是DataFrame对象中列索引的标签。
    可以通过DataFrame的属性index、values和columns。
    1.获取DataFrame对象所有列的名称. 对象名.columns
    2.获取DataFrame对象的索引列表,对象名.index
    3.获取存储在数据结构中的所有元素(值),对象名.values

2.随机数生成DataFrame对象,使用默认索引。

import numpy as np
import pandas as pd

pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

df = pd.DataFrame(np.random.randint(1, 20, (5,3)),
                  index=range(5),
                  columns=('A', 'B', 'C'))

3.随机数生成DataFrame对象,使用时间序列作为索引


df = pd.DataFrame(np.random.randint(5, 15, (10, 3)),
                  index=pd.date_range(start='202007150900',
                                      end='202007151800',
                                      freq='H'),
                  columns=['熟食', '化妆品', '日用品'])

4.用字典创建DataFrame对象 使用姓名字符串做索引

df = pd.DataFrame({'语文':[87,79,67,92],
                   '数学':[93,89,80,77],
                   '英语':[90,80,70,75]},
                  index=['张三', '李四', '王五', '赵六'])

5.嵌套字典创建DataFrame对象.

外部的键生成列名称,内部的键生成索引标签。

df = pd.DataFrame({'张三':{'数学':67,'程序设计':78},
                   '杨下':{'物理':78,'程序设计':99},
                   '冒瞳':{'数学':56,'实习':67}})
print(df,df.values,df.index,df.columns,sep='\n\n')

运行结果:

         张三  杨下  冒瞳
数学      67.0   NaN  56.0
程序设计  78.0  99.0   NaN
物理       NaN  78.0   NaN
实习       NaN   NaN  67.0

[[67. nan 56.]
 [78. 99. nan]
 [nan 78. nan]
 [nan nan 67.]]

Index(['数学', '程序设计', '物理', '实习'], dtype='object')

Index(['张三', '杨下', '冒瞳'], dtype='object')

6.用由Series组成的字典生成DataFrame对象

df = pd.DataFrame({'product':pd.Series(['电视机','手机','空调']),
                  'price':pd.Series([6500,3400,7899]),
                  'count':[23,45,28]})
df1 = pd.DataFrame({'product':['电视机','手机','空调'],
                  'price':[6500,3400,7899],
                  'count':[23,45,28]})
print(df,df1,sep='\n\n')

dt = {'product':['电视机','手机','空调'],
      'price':[6500,3400,7899],
     'count':[23,45,28]}

df1 = pd.DataFrame(dt,columns=['product','count'])
print('\n',df1)

运行结果:

  product  price  count
0  电视机   6500     23
1    手机   3400     45
2    空调   7899     28

  product  price  count
0  电视机   6500     23
1    手机   3400     45
2    空调   7899     28

   product  count
0  电视机     23
1    手机     45
2    空调     28

三、DataFrame数据中的元素选择

1.查看前n行、后n行数据 : 函数head()与tail()的使用

df = pd.DataFrame({'语文':[87,79,67,92,67,87,54],
                   '数学':[93,89,80,77,56,78,69],
                   '英语':[90,80,70,75,75,34,85]},
                  index=['张三', '李四', '王五', '赵六','王冠','张一','吴玉'])
print('查看全部数据'.center(20,'='))

print('查看前5行的数据'.center(20,'='))

print('查看后3行的数据'.center(20,'='))

2.利用列名访问一列的数据


print('\n',df)

print('利用[列名]访问整列的数据'.center(20,'='))
print(df['语文'].head(2))

print("df.列名 与 df['列名'] 访问相同".center(30,'='))
print(df['语文'],df.语文,sep='\n')

print('利用[列名,列名,...]访问多列的数据'.center(26,'='))
print(df[ ['语文','英语'] ].tail(6))

运行结果:

       语文  数学  英语
张三    87    93    90
李四    79    89    80
王五    67    80    70
赵六    92    77    75
王冠    67    56    75
张一    87    78    34
吴玉    54    69    85

===利用[列名]访问整列的数据====
张三    87
李四    79
Name: 语文, dtype: int64

====df.列名 与 df['列名'] 访问相同=====
张三    87
李四    79
王五    67
赵六    92
王冠    67
张一    87
吴玉    54
Name: 语文, dtype: int64

===利用[列名,列名,...]访问多列的数据===
      语文  英语
李四    79    80
王五    67    70
赵六    92    75
王冠    67    75
张一    87    34
吴玉    54    85

3.访问指定信息


print('显示吴玉的所有成绩'.center(30,'='))
print(df[df.index=='吴玉'])
print('显示王冠的所有成绩'.center(30,'='))
print(df[df.index=='王冠'])
print('显示赵六的所有成绩'.center(30,'='))
print(df[df.index=='赵六'])

4.新增或修改一条列数据


df['python'] = [78,54,89,76,56,45,87]
df['语文'] = [100,100,100,100,100,100,100]
print(df)

5.新增或修改一条行数据


print('新增 于一 的所有的成绩'.center(29,'='))
df.loc['于一'] = [66,45,88,99]
df.loc['赵六'] = [99,99,99,99]
print(df)

运行结果:

==========显示吴玉的所有成绩===========
      语文  数学  英语
吴玉    54    69    85
==========显示王冠的所有成绩===========
      语文  数学  英语
王冠    67    56    75
==========显示赵六的所有成绩===========
      语文  数学  英语
赵六    92    77    75

      语文  数学  英语  python
张三   100    93    90      78
李四   100    89    80      54
王五   100    80    70      89
赵六   100    77    75      76
王冠   100    56    75      56
张一   100    78    34      45
吴玉   100    69    85      87

=========新增 于一 的所有的成绩========
      语文  数学  英语  python
张三   100    93    90      78
李四   100    89    80      54
王五   100    80    70      89
赵六    99    99    99      99
王冠   100    56    75      56
张一   100    78    34      45
吴玉   100    69    85      87
于一    66    45    88      99

6.利用切片访问一行或多行的数据


print('利用切片访问一行或多行的数据'.center(26,'='))
print(df[:1],df[3:6],sep='\n\n')

print(df['数学'][6])

运行结果:

======利用切片访问一行或多行的数据======
      语文  数学  英语  python
张三   100    93    90      78

      语文   数学  英语   python
赵六    99    99    99      99
王冠   100    56    75      56
张一   100    78    34      45

69

7.利用切片访问多行多列数据

print('利用切片访问多行多列数据'.center(26,'='))

运行结果:

=======利用切片访问多行多列数据=======
      语文  python  数学
王五   100      89    80
赵六    99      99    99
王冠   100      56    56
      语文  python  数学
王五   100      89    80
赵六    99      99    99
王冠   100      56    56

8.利用 loc,iloc 进行访问或修改指定信息

'''
loc[行索引名称或条件,列索引名称]
iloc[行索引位置,列索引位置] 或 iloc[行索引位置] 即 iloc使用数字做索引
'''
print(df)
print('索引为5的行 iloc[5]'.center(40,'='))
print(df.iloc[5])

print('索引为[3:5]的行 iloc[3:5]'.center(40, '='))
print(df.iloc[3:5])

print('索引为[3:5]的行且列为0:2的所有数据'.center(40, '='))
print(df.iloc[3:5,0:2])

print('访问指定行(0,3,5)指定列(0,2)的数据'.center(40, '='))
print(df.iloc[[0,3,5],[0,2]])

print('访问"于一"的语文与python成绩'.center(40, '='))

print(df)
print('修改行索引为5的值 iloc[5]'.center(40,'='))
df.iloc[5]=[100,65,99,99]
print(df.iloc[5])

print('修改索引为[3:5]的行的数据 iloc[3:5]'.center(40, '='))
df.iloc[3:5]=100
print(df.iloc[3:5])

print('将python成绩乘以0.7'.center(40, '='))
df.语文 =df.语文*0.7
print(df)

print('将"吴玉"成绩都加10'.center(40, '='))
df.loc['吴玉'] =df.loc['吴玉']+10

运行结果:

      语文  数学  英语  python
张三   100    93    90      78
李四   100    89    80      54
王五   100    80    70      89
赵六    99    99    99      99
王冠   100    56    75      56
张一   100    78    34      45
吴玉   100    69    85      87
于一    66    45    88      99
=============索引为5的行 iloc[5]=============
语文      100
数学       78
英语       34
python     45
Name: 张一, dtype: int64
==========索引为[3:5]的行 iloc[3:5]==========
      语文  数学  英语  python
赵六    99    99    99      99
王冠   100    56    75      56
=========索引为[3:5]的行且列为0:2的所有数据==========
      语文  数学
赵六    99    99
王冠   100    56
========访问指定行(0,3,5)指定列(0,2)的数据=========
      语文  英语
张三   100    90
赵六    99    99
张一   100    34
===========访问"于一"的语文与python成绩===========
      语文  数学  英语  python
张三   100    93    90      78
李四   100    89    80      54
王五   100    80    70      89
赵六    99    99    99      99
王冠   100    56    75      56
张一   100    78    34      45
吴玉   100    69    85      87
于一    66    45    88      99
===========修改行索引为5的值 iloc[5]============
语文      100
数学       65
英语       99
python     99
Name: 张一, dtype: int64
=======修改索引为[3:5]的行的数据 iloc[3:5]========
      语文  数学  英语  python
赵六   100   100   100     100
王冠   100   100   100     100
=============将python成绩乘以0.7=============
      语文  数学  英语  python
张三  70.0    93    90      78
李四  70.0    89    80      54
王五  70.0    80    70      89
赵六  70.0   100   100     100
王冠  70.0   100   100     100
张一  70.0    65    99      99
吴玉  70.0    69    85      87
于一  46.2    45    88      99
==============将"吴玉"成绩都加10===============
      语文   数学   英语  python
张三  70.0   93.0   90.0    78.0
李四  70.0   89.0   80.0    54.0
王五  70.0   80.0   70.0    89.0
赵六  70.0  100.0  100.0   100.0
王冠  70.0  100.0  100.0   100.0
张一  70.0   65.0   99.0    99.0
吴玉  80.0   79.0   95.0    97.0
于一  46.2   45.0   88.0    99.0

9.筛选符合条件的数据


df1 = df[df.语文<60]
df11 = df[df['语文']<60]
print(df1,df11,sep='\n\n')

df2 = df[(df.语文<60) & (df.python<60)]
print(df2)

运行结果:

      语文  数学  英语  python
于一  46.2  45.0  88.0    99.0

      语文  数学  英语  python
于一  46.2  45.0  88.0    99.0

Empty DataFrame
Columns: [语文, 数学, 英语, python]
Index: []

10.插入数据的操作方法

import pandas as pd

df1 = pd.DataFrame([['张一','男',20],
                    ['五十','男',22],
                    ['吴下','男',18],
                    ['刘苛玉','女',19]],
                   columns=['姓名','性别','年龄'])

print("在最后新增一列".center(30,'='))
print("在数据框最后加上 '籍贯'一列")

df1['籍贯']=['江苏','河南','江苏','浙江']
print(df1)

print("在指定位置新增列:用insert()".center(30,'='))

df1.insert(2,'班级',['英才1901']*4)
print(df1)

运行结果:

===========在最后新增一列============
在数据框最后加上 '籍贯'一列
     姓名 性别  年龄  籍贯
0    张一   男    20  江苏
1    五十   男    22  河南
2    吴下   男    18  江苏
3  刘苛玉   女    19  浙江

=====在指定位置新增列:用insert()=====
     姓名 性别      班级  年龄  籍贯
0    张一   男  英才1901    20  江苏
1    五十   男  英才1901    22  河南
2    吴下   男  英才1901    18  江苏
3  刘苛玉   女  英才1901    19  浙江

大家伙学会了吗?记得一键三连哦~
三克斯~ O(∩_∩)O哈哈~

Original: https://blog.csdn.net/ChristensonLee/article/details/116516614
Author: KirinLee_01
Title: Python数据分析——pandas数据结构(DataFrame)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737873/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球