python:DataFrame常见操作_获取数据

DataFrame常见操作_获取数据

 

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

一、创建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
'''

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行数据分析和建模之前,数据预处理是必不可少的步骤。本文将介绍常见的数据预处理方法,以及如何用Python实现它们。 ## 缺失值处理 在实际数据中,经常会出现缺失值。这些缺失值可能是由于数据采集过程中的问题,或者是由于某些数据不可用或丢失。在分析过程中,缺失值会影响模型的准确性,因此需要进行处理。 ### 1. 删除缺失值 一种简单的方法是删除包含缺失值的行或列。这种方法简单、直接,但也可能会导致数据丢失过多。 ```python # 删除包含缺失值的行 df.dropna(inplace=True) # 删除包含缺失值的列 df.dropna(axis=1, inplace=True) ``` ### 2. 填充缺失值 另一种方法是用其他值填充缺失值。常见的填充方法包括: - 用平均值、中位数或众数填充 - 用前一个或后一个非缺失值填充 - 用插值法填充(比如线性插值、多项式插值等) ```python # 用平均值填充缺失值 df.fillna(df.mean(), inplace=True) # 用前一个非缺失值填充缺失值 df.fillna(method='ffill', inplace=True) # 用插值法填充缺失值 df.interpolate(inplace=True) ``` ## 异常值处理 异常值是指与其它数据极为不同的数据点。异常值可能是由于数据采集过程中的错误或异常,或者是由于真实的异常情况。在分析过程中,异常值会影响模型的准确性,因此需要进行处理。 ### 1. 删除异常值 一种简单的方法是删除包含异常值的行或列。这种方法可能会导致数据丢失过多。 ```python # 删除包含异常值的行 df = df[df['column'] < threshold] # 删除包含异常值的列 df.drop('column', axis=1, inplace=True) ``` ### 2. 替换异常值 另一种方法是用其他值替换异常值。常见的替换方法包括: - 用平均值、中位数或众数替换 - 用前一个或后一个非异常值替换 - 用插值法替换(比如线性插值、多项式插值等) ```python # 用中位数替换异常值 median = df['column'].median() df.loc[df['column'] > threshold, 'column'] = median # 用前一个非异常值替换异常值 df.loc[df['column'] > threshold, 'column'] = df.loc[df['column'] < threshold, 'column'].iloc[-1] # 用插值法替换异常值 df['column'] = df['column'].interpolate() ``` ## 数据标准化 在进行数据分析和建模之前,通常需要对数据进行标准化。标准化可以将不同变量的取值范围统一,避免因为变量取值范围不同而导致的模型偏差。 常见的标准化方法包括: - Z-score标准化 - 最小-最大标准化 - 小数定标标准化 ```python # Z-score标准化 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df['column'] = scaler.fit_transform(df[['column']]) # 最小-最大标准化 from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['column'] = scaler.fit_transform(df[['column']]) # 小数定标标准化 df['column'] = df['column'] / 10**np.ceil(np.log10(df['column'].abs().max())) ``` ## 数据编码 在进行数据分析和建模之前,通常需要对非数值型数据进行编码。编码可以将非数值型数据转换成数值型数据,方便模型进行计算。 常见的编码方法包括: - one-hot编码 - 标签编码 ```python # one-hot编码 from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder() encoded = encoder.fit_transform(df[['column']]) df_encoded = pd.DataFrame(encoded.toarray(), columns=encoder.get_feature_names(['column'])) # 标签编码 from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() df['column'] = encoder.fit_transform(df['column']) ``` ## 特征选择 在进行数据分析和建模之前,通常需要对特征进行选择。特征选择可以帮助我们选择最重要的特征,避免因为特征过多而导致的过拟合问题。 常见的特征选择方法包括: - 方差选择法 - 相关系数法 - 卡方检验法 - 互信息法 - 基于模型的选择法 ```python # 方差选择法 from sklearn.feature_selection import VarianceThreshold selector = VarianceThreshold(threshold=0.1) df_selected = selector.fit_transform(df) # 相关系数法 from sklearn.feature_selection import SelectKBest from scipy.stats import pearsonr selector = SelectKBest(score_func=pearsonr, k=5) df_selected = selector.fit_transform(df, target) # 卡方检验法 from sklearn.feature_selection import chi2 selector = SelectKBest(score_func=chi2, k=5) df_selected = selector.fit_transform(df, target) # 互信息法 from sklearn.feature_selection import mutual_info_classif selector = SelectKBest(score_func=mutual_info_classif, k=5) df_selected = selector.fit_transform(df, target) # 基于模型的选择法 from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import LogisticRegression selector = SelectFromModel(LogisticRegression(penalty='l1', C=0.1)) df_selected = selector.fit_transform(df, target) ``` 以上就是常见的数据预处理方法和Python实现方式。在实际分析和建模中,我们需要根据具体情况选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值