DataFrame常见操作_获取数据

 

DataFrame是Pandas库中最重要的数据结构之一,它类似于Excel表格或SQL表。因此在我做数据分析的过程中频繁用到,基于此,整理了一些平时的笔记文档用于初学者。后续会持续更新,有错误欢迎各位小伙伴指正。


目录

  • DataFrame常见操作_获取数据
  • 一、创建DataFrame
  • 二、DataFrame的属性和方法
  • 三、数据选择与操作


一、创建DataFrame

 

  • 从列表或数组创建
import pandas as pd
# 将列表转化为DataFrame
my_list = [1, 2, 3, 4, 5]
df_from_list = pd.DataFrame(my_list, columns=['Column_name'])

# 将数组转化为DataFrame
my_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df_from_array = pd.DataFrame(my_array, columns=['Column1', 'Column2', 'Column3'])

print(df_from_list)
print(df_from_array)

'''
   Column_name
0            1
1            2
2            3
3            4
4            5
   Column1  Column2  Column3
0        1        2        3
1        4        5        6
2        7        8        9
'''

 

  • 从字典创建
import pandas as pd
# 定义一个字典
data = {'名称': ['苹果', '香蕉', '橙子'],
        '价格': [5, 3, 2],
        '数量': [10, 8, 15]}

# 将字典转换为DataFrame
df = pd.DataFrame(data)

# 打印结果
print(df)

'''
   名称  价格  数量
0  苹果   5  10
1  香蕉   3   8
2  橙子   2  15
'''

 

  • 从文件(csv、Excel等)创建
    用python读取excel文件
import pandas as pd
# 读取xls文件
df_season = pd.read_excel('D:/google/Download/门店数据.xls')
df_season.head()

# 读取xlsx文件
df_shop_data = pd.read_excel('D:/google/Download/门店数据.xlsx')
df_shop_data.head()

# 读取csv文件
df_shop_data = pd.read_excel('D:/google/Download/门店数据.csv')
df_shop_data.head()

'''
    订单门店	Column1	Column2	Column3	Column4
0	白云保利店	238	4	279	0
1	白云广场店	502	3	580	2
2	百汇广场店	752	1	826	1
3	百胜店	518	0	555	0
4	百信广场店	508	0	558	1
'''

 

  • 从数据库创建
    用python读取MySQL数据库
import pymysql
# 创建MySQL数据库连接
'''
host:数据库地址
uesr:用户名
password:密码
database:数据库名
port:端口
'''
db = pymysql.connect(
     host="host", 
     user="user", 
     password="password", 
     database="database", 
     port=port)
# 创建cursor对象
cursor = db.cursor()
# 写查询的sql,\表示换行
select_sql = "SELECT *\
            FROM my_table\
            where id >= 100\
            limit 100"

# 执行sql
cursor.execute(select_sql)
result = cursor.fetchall()

# 打印每一行数据
for row in result:
    print(row)
    
# 关闭cursor和连接
cursor.close()
db.close()

 


 

二、DataFrame的属性和方法

  • head():返回DataFrame的前几行,默认为前5行
import pandas as pd
# 读取csv文件
df_shop_data = pd.read_excel('D:/google/Download/门店数据.csv')
# 返回文件的前五行
df_shop_data.head()   #df_shop_data.head(7)

'''
    订单门店	Column1	Column2	Column3	Column4
0	白云保利店	238	4	279	0
1	白云凯德广场店	502	3	580	2
2	百汇广场店	752	1	826	1
3	百胜店	518	0	555	0
4	百信广场店	508	0	558	1
'''
  • tail():返回DataFrame的最后几行,默认为后5行
import pandas as pd
# 读取csv文件
df_shop_data = pd.read_excel('D:/google/Download/门店数据.csv')
# 返回文件的后7行
df_shop_data.tail(7)

'''
    订单门店	 Column1	Column2	Column3	Column4
196	中华广场店	873	1	979	1
197	中环店	 1821	4	1985	2
198	中建店	680	2	772	2
199	卓为城店	218	3	256	0
200	怡丰店	508	0	556	0
201	寮步广场店	642	0	672	0
202	星城国际店	903	0	945	0
'''
  • shape:返回DataFrame的行数和列数 columns:返回DataFrame的列名
import pandas as pd
# 读取csv文件
df_shop_data = pd.read_excel('D:/google/Download/门店数据.csv')
# 返回数据的行列数
df_shop_data.shape

'''
(203, 5)
'''
  • dtypes:返回DataFrame的每列的数据类型 info():返回DataFrame的基本信息,包括列名、非空值数量、数据类型等
import pandas as pd
# 读取csv文件
df_shop_data = pd.read_excel('D:/google/Download/门店数据.csv')
# 返回DataFrame的基本信息
df_shop_data.info()

'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 203 entries, 0 to 202
Data columns (total 5 columns):
 #   Column   Non-Null Count  Dtype 
---  ------   --------------  ----- 
 0   订单门店     203 non-null    object
 1   Column1  203 non-null    int64 
 2   Column2  203 non-null    int64 
 3   Column3  203 non-null    int64 
 4   Column4  203 non-null    int64 
dtypes: int64(4), object(1)
memory usage: 8.1+ KB
'''
  • describe():返回DataFrame每列的统计摘要(平均值、标准差、最小值、最大值等)
import pandas as pd
# 读取csv文件
df_shop_data = pd.read_excel('D:/google/Download/门店数据.csv')
# 返回DataFrame的统计值
df_shop_data.describe()

'''
           Column1	 Column2     Column3	 Column4
count	203.000000	203.000000	203.000000	203.000000
mean	670.536946	1.285714	745.935961	0.862069
std	    269.321484	1.363289	294.097261	1.039178
min	     16.000000	0.000000	15.000000	0.000000
25%	    497.000000	0.000000	552.000000	0.000000
50%	    654.000000	1.000000	742.000000	1.000000
75%	    811.000000	2.000000	903.000000	1.000000
max	   1821.000000	6.000000	2018.000000	6.000000
'''
  • values:返回DataFrame的值(不包括索引和列名)
import pandas as pd
# 读取csv文件
df_shop_data = pd.read_excel('D:/google/Download/门店数据.csv')
# 返回DataFrame的值
df_shop_data.values

'''
array([['白云保利店', 238, 4, 279, 0],
       ['白云广场店', 502, 3, 580, 2],
       ['百汇广场店', 752, 1, 826, 1],
       ...,
       ['怡丰店', 508, 0, 556, 0],
       ['寮步广场店', 642, 0, 672, 0],
       ['星城国际店', 903, 0, 945, 0]], dtype=object)
'''

 

三、数据选择与操作

  • 选择列:使用列名、使用loc[]和iloc[]方法
# 获取列
Column = df_shop_data['Column1']
print(Column)

'''
0      238
1      502
2      752
3      518
4      508
      ... 
198    680
199    218
200    508
201    642
202    903
Name: Column1, Length: 203, dtype: int64
'''

#loc[]是根据index来索引
#使用loc[]获取列,获取订单门店列的第123,23行
loc_Result = df_shop_data.loc[[123,23],'订单门店']
print(loc_Result)

'''
123    豪苑店
23     陈文店
Name: 订单门店, dtype: object
'''

#使用iloc[]是integer loc[],根据行号来索引
#使用iloc[]获取列,获取订单门店列的第123,23行
iloc_Result = df_shop_data.iloc[[123,23],0]
print(iloc_Result)

'''
123    豪苑店
23     陈文店
Name: 订单门店, dtype: object
'''
  • 选择行:使用loc[]和iloc[]方法
#loc[]是根据index来索引
#使用loc[]获取行,获取订单门店列的第123,23行
loc_Result = df_shop_data.loc[[123,23],'订单门店']
print(loc_Result)

'''
123    豪苑店
23     陈文店
Name: 订单门店, dtype: object
'''

#使用iloc[]是integer loc[],根据行号来索引
#使用iloc[]获取行,获取订单门店列的第123行
iloc_Result = df_shop_data.iloc[123,:]
print(iloc_Result)

'''
订单门店      豪苑店
Column1      859
Column2        2
Column3      927
Column4        1
Name: 123, dtype: object
'''

#当然,也可以直接获取行,例如获取前两行
#值得注意的是,第一行从0开始,且索引不包括右括号,所以要用[0,2]表示第一、二行
Row = df_shop_data[0:2]
print(Row)

'''
      订单门店  Column1  Column2  Column3  Column4
0    白云保利店      238        4      279        0
1    白云广场店      502        3      580        2
'''
  • 条件筛选:使用布尔索引
#使用条件筛选获取数据
condition_df = df_shop_data[df_shop_data['Column1']>1300]
print(condition_df)

'''
      订单门店  Column1  Column2  Column3  Column4
7      保利店     1812        1     2018        1
22     陈文店     1424        2     1541        2
'''