读取数据
import pandas as pd
header = ['歌名','歌手','专辑','标签']
df = pd.read_csv('name.csv',na_values='无',index_col=0,names = header)
#读取时会把‘无’替换为nan,index_col=0以文本索引为索引,names指定列名
#
#content = [json.loads(line) for line in open(path,encoding='utf-8')]
查看前几行:df.head()
查看尾几行:df.tail()
查看信息:df.info()
查看字段名称:df.columns
查看字段形态:df.dtypes
取得叙述性统计(数值):df.describe()
数据更改
- 更改数据格式:
df['price'].astype('int')
- 更改列名称:
df.rename(columns={'category': 'category-size'})
数据筛选
- 筛选字段**:
df['产权性质'].value_counts()
- 筛选指定内容:
df[df['age']>20]
- 筛选多个指定内容
df[(df['租金(元)']<2000) & (df['面积(平米)']>20)]
df[~df['A'].isin(['null'])] #选取df中A列不包含‘null’的行
df = df[df['decorate'].isin(['精装修','豪华装修','简装修'])]#多条件筛选
df1[df1['A'].isin([1])] #选取df1中A列包含数字1的行
数据排序
data.sort_values(by=(['My_score','acreage']),ascending=False)
#ascending选择升序或降序排列
移除重复数据
- drop_duplicates方法,它用于返回一个移除了重复行的DataFrame:
import pandas as pd
data=pd.DataFrame({'k1':['one']*3+['two']*4, 'k2':[1,1,2,2,3,3,4]})
print(data)
print(data.drop_duplicates())
# 删除指定列的是重复数据, keep=‘first’ 保留出现的第一个,last为最后一个
df= df.drop_duplicates(['k1','k2'],keep='first')
- 移除指定栏位的重复行:
import pandas as pd
data=pd.DataFrame({'k1':['one']*3+['two']*4, 'k2':[1,1,2,2,3,3,4]})
data['v1']=range(7)
print(data)
print(data.drop_duplicates(['k1','k2']))
新增/删除栏位
- 新增:
df['employee'] = True
- 删除:
del df['employee']
#df = df.drop('employee',1)
设定新的索引
df['userid'] = range(1,10)
df.set_index('userid',inplace=Ture)
根据位置索引取值
- 根据位置
- 根据索引
处理缺失值
- 检查缺失值
检查非缺失值:df[‘gender’].notnull()
检查缺失值:df[‘gender’].isnull()
-
检查DataFrame是否还有缺失值:
df.isnull().values.any()
-
检查字段是否还有缺失值:
df['name'].isnull().values.any()
-
检查字段缺失值的数量:
df.isnull().sum()
-
计算所有缺失值的数量:
df.isnull().sum().sum()
侦测缺失值:df.isnull() 或 df.isnull().any()
查看缺失比例:df.isnull().sum()/df.count()
–显示缺失值
- 显示缺失值行列:
df[df.isnull().values==True]
- 舍弃缺失值
舍弃含有任意缺失值的行:df.dropna()
舍弃所有字段都含有的缺失值的行:df.dropna(how='all')
舍弃超过两栏缺失值的行:df.dropna(thresh=2)
增加一包含缺失值的列:df['emplyee'] = np.ana
舍弃皆为缺失值的列:df.dropna(axis=1,how='all')
- 填补缺失值
用0填补:df.fillna(0)
用平均数缺失值:df['age'].fillna(df['age'].mean())
用性别平均值填补:df['age'].fillna(df.groupby('gendre')['age'].transform('mean'),inplace=True)
-
向前向后填补
向前:df.fillna(method='pad')
向后:df.fillna(method='bfill',limit=2)
-
使用内插法填补
按照一定规律:df.interpolate()
资料转换 Apply,Map,ApplyMap
- map将函数套用到Series上的每个元素
def removeDollar(e):
retrun e.split("元")[0]
df['价格'].map(removeDollar)
使用匿名函数
df['价格'].map(lambda e: e.split('元')[0])
- apply将函数套用到DataFrame上的行与列
- applymap将函数套用到DataFrame上的每个元素
处理时间格式资料
- 打印出现在的时间
from datetime import datetime
current_time = datetiem.now()
将时间转换为字符串
current_time.strftime(‘%Y-%m-%d’)
将字符串转换为时间
current_time.strftime(’2018-01-01‘,’%Y-%m-%d‘)
时间格式:西年2018年01月01日
pandas处理:
- pandas中使用正则:
df遍历所以行
参考
.iterrows():在单独的变量中返回索引和行项目,但显着较慢
.itertuples():快于.iterrows(),但将索引与行项目一起返回,ir [0]是索引
zip:最快,但不能访问该行的索引
for n in df.iterrows():
print(n[1])
print(n[1][0])
print(n[1][1])
print(n[1][3])
break
# 歌名 蜗牛与黄鸝鸟
歌手 群星
专辑 金韵民谣风1977-1982辉煌民歌记录精选
标签 70后
Name: 0, dtype: object
蜗牛与黄鸝鸟
# itertuples
for n in df.itertuples():
print(n)
print(n[1])
#Pandas(Index=0, 歌名='蜗牛与黄鸝鸟', 歌手='群星', 专辑='金韵民谣风1977-1982辉煌民歌记录精选', 标签='70后')
蜗牛与黄鸝鸟
# zip
for i,j in zip(sing['歌名'],sing['歌手']):
print(i,j)
# 蜗牛与黄鸝鸟 群星
保存数据
我们一般都是保存为CSV文件格式
#index参数设置为False表示不保存行索引,header设置为False表示不保存列索引
data.to_csv("data.csv",index=False,header=False)
pandas在保存文件的时候,默认会将缺失值保存成空字符串
如果需要填充
#不保存行索引和列索引,使用NULL来替代空字符串
data.to_csv("data.csv",index=False,header=False,na_rep="NULL")
通过设置to_csv函数的sep参数可以修改默认保存文件时候的分隔符
它默认为逗号:,
data.to_csv("data.csv",sep="-")