读写文件
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"]
处理时间数据
- 将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