读取数据
import pandas as pd
df = pd.read_csv('name.csv',na_values='无',index_col=0)
#读取时会把‘无’替换为nan,index_col=0以文本索引为索引
#
#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())
- 移除指定栏位的重复行:
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')
扫描二维码关注公众号,回复:
3151091 查看本文章
- 填补缺失值
用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中使用正则: