pandas一些用法

读写文件

  • 读取文件

df = pd.read_excel('raw_data.xlsx')

# 读取csv或者txt文件
df = pd.read_csv('text.txt')
# 把第一列作为索引
df = pd.read_csv('text.txt', index_col=0)
# 不把第一行作为属性
df = pd.read_csv('text.txt', header=None)
# 不用原数据中的属性,重新设置属性
df = pd.read_csv('text.txt', header=0,names=header)

  • 存储文件

# 不存储索引号
df.to_csv('test.txt', index=None, sep='\t')
# 不存储header
df.to_csv('test.txt', header=False, sep='\t')
# 设置存储数据的类型格式
df.to_csv('test.txt', float_format='%.4f', sep='\t')
  • 将大数据分块读取和存储

df = pd.read_csv('a.txt ',sep='\t', header=None,low_memory =False)
# 分成100块
for i in range(100): 
    try:
    	# 每个子块中有100000条数据
        df = df.get_chunk(100000)
        # 用jupyter notebook需要删除参数 iterator=True
        df.to_csv('filename.csv', sep='\t', header=False, iterator=True, index=False, mode='a')
        break
    except StopIteration:
        break

查看和统计

  • 查看文件内容及类型

# 查看前五行
df.head(5)
  • 查看每列缺省项个数

frame.apply(lambda x: sum(x.isnull()))
  • 个数统计

统计一列中各项出现的次数

import pandas as pd
raw_data = { 'name': ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel'],
            'age': [20, 20, 22, 21],
            'favorite_color': ['blue', 'blue', 'yellow', "green"],
            'grade': [88, 92, 95, 70]}

df = pd.DataFrame(raw_data)

# 得到pandas.core.series.Series
df['age'].value_counts()
# 归一化,输出每个种类的比例
df.['age'].value_counts(normalize=True)
  • 类型数统计

统计一列中出现过多少种类型

id_num = df['id'].unique().shape[0]
  • 分组统计

统计两列同时出现的次数

import pandas as pd
raw_data = { 'name': ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel'],
            'age': [20, 20, 22, 21],
            'favorite_color': ['blue', 'blue', 'yellow', "green"],
            'grade': [88, 92, 95, 70]}
 
df = pd.DataFrame(raw_data)
a = df.groupby(by=['age', 'favorite_color'])
b = a.size()
print(b)
b = b.reset_index(name='times', drop=True)
b.head()

在这里插入图片描述

数据操作

  • 取其中几列

# columns中为列名
frame = pd.DataFrame(df, columns = ['iyear', 'doubtterr', 'population', 'country'
                                     'region', 'city', 'attacktype1', 'suicide',
                                     'weapontype1', 'targtype1', 'natlty1', 'gname',
                                     'claimed'])
or
frame = df[[ ['iyear', 'doubtterr', 'population', 'country', 'region', 'city', 'attacktype1', 'suicide','weapontype1', 'targtype1', 'natlty1', 'gname', 'claimed']]
  • 类型转换

# 查看类型
df.dtypes

# 类型转换
df['a'] = df['a'].astype('int')
# Dataframe转array
df = df.values
  • 排序

# 先按b列降序,再按a列升序排序
df.sort_values(by=['b','a'],axis=0,ascending=[False,True])

# 按b列升序排序
df.sort_values(by='b',axis=0)

# 按行3升序排列
df.sort_values(by=3,axis=1)
  • 删除某一列中含有特定字符的项

# 删除item_id中含有,的项
train = train[ ~ train['item_id'].str.contains(',')]
# 删除item_id为-1的项
train = train[train['item_id' != -1]]
  • 删除重复项

# 删除重复行
df = df.drop_duplicates()
# 删除指定行中的重复项
df = df.drop_duplicates(['A']
  • 删除缺失值

# 删除有缺失的行
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
# 所有值缺失删除行
DataFrame.dropna(axis=0, how='all', thresh=None, subset=None, inplace=False)
# 删除有n个值缺失的行
DataFrame.dropna(thresh=n)
  • 删除行或列

# 删除列
df.drop(['B', 'C'], axis=1)
# 删除行
df.drop([0,1], axis=0)
  • 合并数据

# 以A为相同项合并df1和df2
# how的参数有'right','left','inner','outer',分别是右、左、并集、交集
df= pd.merge(df1, df2, how='inner', on=['A'])
  • 取逗号分隔中数值大的数

df=pd.DataFrame({"id":["1","2","3,4"]})
# 取最大的数
def max_str(t):
    a=[int(i) for i in t]
    return max(a)
# 将有逗号的object变为逗号分隔的最大的数
df["id_max"]=df["id"].str.split(",").map(max_str)
df
  • 取两列生成字典

df=pd.DataFrame({a:['Name', 'Age', 'Gender'],
						b:['Ali', '19', 'China']})
# 得到映射a:b
dic = df.set_index("a").to_dict()["b"]
  • 透视表

Pandas透视表

处理时间数据

  • 将timestamp转化为年月日时分秒
df['timestamp'] = pd.to_datetime(df['timestamp']) # convert date column to datetime

在这里插入图片描述
在这里插入图片描述

  • 从时分秒取出年月日星期等数据
# 日期
df['date'] = df['timestamp'].dt.date
# 月份
df['month'] = df['timestamp'].dt.month
# 小时
df['hour'] = df['timestamp'].dt.hour
# 星期
df['dayofweek'] = df['timestamp'].dt.dayofweek
# 年
df['year'] = df['timestamp'].dt.year
# 季度
df['quarter'] = df['timestamp'].dt.quarter
发布了69 篇原创文章 · 获赞 28 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_24852439/article/details/88081183