Python数据处理

Pandas

Series

  • 一列带索引的数据
s = pd.Series(np.random.randn(5), name='Helloworld')

DataFrame

  • 二维数据,多组Series的集合
df = pd.read_excel('GDP.xlsx')
  • 重置索引
df = df.set_index('province')
  • 更改列名
df.columns = '2010', '2019'
data = data.rename(columns = lambda x: x.lower()) #列名转化为小写
  • 数据处理
data['2010'].sum()
data['2010'].mean()
data['2010'].max()
data['2010'].min()
data.describe() #查看描述性统计
data.info() #查看数据类型
df["价格"] = df["价格"].astype("float64") #数据类型转化
  • 数据提取

    • iloc索引器按照位置进行基于整数的索引

      df.iloc[0:3, 2:4] #选择1-3行,3-4列
      
    • loc索引器按照索引、布尔值或者条件选择数据

      df.loc[['A','B'], ['C','D']] #选择多行多列
      df.loc[df['first_name'] == 'DFL'] #按照布尔值选择
      
  • 数据合并

    • concat:沿着一条轴将多个DataFrame堆叠到一起
    • append:将Series或字典数据添加到DataFrame
    • merge:按照一个或多个键将不同DataFrame中的行连接起来
    • join:将两个没用共同列名的数据进行快速合并,默认是保留被合并的数据索引
  • 数据聚合

    • 调用groupby函数,按照一列数据的不同组对DataFrame进行分组
  • apply函数

    • 用于对当列数据遍历调用自定义函数
    • 增加字段
    df = pd.read_csv('./cook.csv') 
    df['难度'] = df['用料数'].apply(lambda x:'简单'if x<5else('一般'if x<15 else'较难')) #增加难度字段
    
    • 批量分割字符
    df = df[df['楼层'].notnull()]
    df['所在楼层']=df['楼层'].apply(lambda x:x.split('/')[0])
    df['所在楼层'] = df['所在楼层'].astype("int32")
    
    • 正则匹配
    def get_subway_distance(row):
        distance=re.search(r'\d+(?=米)',row)
        if distance==None:
            return-1
        else:
            return distance.group()
    df['距离地铁距离']=df['地铁'].apply(get_subway_distance)
    
  • 导出和保存DataFrame

    data.to_csv('food.csv', index=False, encoding='utf-8')
    data.to_excel
    
    #将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为utf8,否则有些latin字符不能处理
    from sqlalchemy import create_engine
    connect = create_engine('mysql+pymysql://你的用户名:你的密码@localhost:端口号/数据库名?charset=utf8')
    pd.io.sql.to_sql(data,'stock_quotes', connect, schema='test', if_exists='append',index=False)  #replace替换,append追加
    #建议数据插入后,增加id字段并设置为自增主键,以后追加或更新数据时才不会报错
    
posted @ 2022-10-05 09:28  z5onk0  阅读(46)  评论(0编辑  收藏  举报