import pandas
# 将1.csv数据导入到data变量中
data = pandas.read_csv(
# 文件路径
'D:/1.csv',
# 设置engine参数,使得路径中含义中文不会报错
engine='python',
# 设置编码格式
encoding='utf8'
)
# 数据导出
# 定义数据框
data1 = pandas.DataFrame(
data={
'name':['a', 'b']
'age':[12, 23]
}
)
# 调用to_csv函数,将数据保存到data_csv文件中
data1.to_csv(
'D:/data.csv',
# 这边设置不输出索引
index=False
)
这边使用read_table函数,具体参数这边就提了,有兴趣百度哈。
import pandas
# txt文件数据导入
data = pandas.read_table(
'D:/1.txt',
engine='python',
# 设置列名列表
names=['name', 'age']
# 设置逗号为分隔符
sep=',',
encoding='utf8'
)
#excel文件数据导入
data1 = pandas_excel(
'D:/1.xlsx',
# 要读取的sheet名,默认为第一个
sheet_name='data'
)
#数据导出,与csv文件类似,这边不做说明
其中data为数据框,如何定义上文有,利用sort_value函数进行排序。
sortData = data.sort_value(
# 要排序的列
by=['年龄','性别'],
# 设置升序(True)或者降序
ascending=[True, False]
)
其中data为数据框,如何定义上文有,利用duplicated函数进行查找重复数据,然后利用drop_duplicates()函数进行删除重复数据
# 查找重复数据,
dIndex = data.duplicated()
# 其中默认全部列都重复的数据返回值为True.
return dIndex
# 查找特定的列重复值
d1Index = data.duplicated(['性别'])
# 输出重复的数据
data[data.duplicated()]
# 删除重复的数据
# 直接删除重复值,默认根据所有的列进行删除
cData = data.drop_duplicates()
其中data为数据框,如何定义上文有,利用fillna()函数进行数据补齐,也可以利用dropna函数直接删除缺失值。
利用str.strip()函数可以去除字符串头尾的空格,当然也可以设置value参数值对其他字符进行删除
# 利用消费的平均值(mean()函数)来补齐缺失值
data['消费'] = data.消费.fillna(data.消费.mean())
# 直接删除缺失值
cData = data.dropna()
# 去除字符串前后的空格
data['name'].str.strip()
其中data为数据框,如何定义上文有
# 将电话号码列转化为字符串
data['电话号码']=data.电话号码.astype(str)
# 字符串转数值
data['数值型电话号码'] =data.电话号码.astype(float)
其中data为数据框,如何定义上文有
# 把注册时间这一列添加转为时间类型的数据
# 然后把时间类型的数据添加到数据框中的‘时间’列表
data['时间'] = pandas.to_datetime(
data.注册时间,
format='%Y/%m/%d'
)
# 时间格式化,上面的出来会出现小时,而我们只要年月
data['年月'] = data.时间.dt.strftime('%Y-%m')
其中data为数据框,如何定义上文有
# 1、按位置拆分
# 先转换为字符串格式,然后取出前3位
data['tel']=data['tel'].astype(str)
data['tel'].str.slice(0,3)
# 2、按分隔符进行拆分
# 第一个参数为分隔符,第二个参数为分割为几列(1表示2列),第三个参数是否展开数据框
data['name'].str.split(' ',1,True)
# 3、按时间属性抽取
# 先转换为时间数据类型
data['时间'] = pandas.to_datetime(
data.注册时间,
format='%Y%m%d %H:%M:%S'
)
# 抽取时间的各种属性,增加到对应的列
data['年'] = data['时间'].dt.year
data['月'] = data['时间'].dt.month
data['周'] = data['时间'].dt.weekday
data['日'] = data['时间'].dt.day
data['时'] = data['时间'].dt.hour
data['分'] = data['时间'].dt.minute
data['秒'] = data['时间'].dt.second
# 1、根据关键字抽取记录
# 第一个参数为要参考的字段,na参数为填充方式,在过滤的情况下,要设置为False
fData = data[data.title.str.contains('电台', na=False)]
# 2、空值抽取
# 抽取商品标题为空值的数据记录
fData = data[data.title.isnull()]
# 3、数值范围抽取
# 单条件比较运算
data[data.comments>10000]
# 范围抽取,True表示包括边界
data[data.comments.between(1000,10000,True)]
# 4、时间范围抽取
data['ptime'] = pandas.to_datetime(
data.ptime,
format='%Y-%m-%d'
)
from datetime import datetime
# 定义时间点
dt1=datetime(
year=2019,
month=1,
day=1
)
dt1=datetime(
year=2020,
month=8,
day=11
)
# 获取介于dt1和dt2之间的数据
fData = data[(data.ptime>=dt1)&(data.ptime<=dt2)]
# 组合条件抽取
# ~为取反
data[~data.title.str.contains('电台',na=False)]
data[
(data.comments >=1000)&(data.comments <=10000)
& data.title.str.contains('电台',na=False)
]
# 按个数抽样
data.sample(n=3)
# 按百分比抽样
data.samle(frac=0.2)
# 是否放回抽样,
data.sample(n=3,True)
其中data1、data2、data3为要合并的数据框
# 记录合并
data= pandas.concat([data1, data2, data3])
# 也可以指定列进行合并
data = pandas.concat(
[
data1[['id', 'comments']],
data2[['comments', 'title']],
data3[['id','title']]
]
)
# 字段合并
# 转为字符串
data.data.astype(str)
# 合并字段
tel = data['band']+data['area']+data['num']
使用pandas.merge(left, right, left_on, right_on, how=‘inner’)进行操作,具体参数说明如下
参数 | 说明 |
---|---|
left | 左边的数据框 |
right | 右边的数据框 |
left_on | 连接中使用左边数据库的列名 |
right_on | 连接中使用右边数据库的列名 |
how=‘inner’ | 连接方式, 默认为inner,还有left,right,outer |
# 内连接
itemPrices = pandas.merge(
data1,
data2,
left_on='id',
right_on='id',
how='inner'
)
简单的数值计算,包括四则运算
# 时间计算
data['时间'] = pandas.to_datetime(
data.注册时间,
format'%Y%m%d'
)
from datetime import datetime
data['注册时间'] = datetime.now() - data['时间']
# 只保留年月日
data['注册时间'] =data['注册天数'].dt.days
数据标准化
0-1标准就是x*=(x-min)/(max-min)
# round()第一个参数为要四舍五入的数据,第二个参数为要保留的位数
data['消费标准化']= round(
(data.消费-data.消费.min())/
(data.消费.max() - data.消费.min())
,2
)
数据的分组。利用pandas.cut函数来完成,其参数说明如下
参数 | 说明 |
---|---|
x | 数据框的列,Series |
bins | 用于指定分组的列表 |
right | 分组区间的右边界是否关闭,默认关闭 |
labels | 分组自定义标签。可以不自定义 |
bins = [0, 20, 40, 60, 80, 100, 120]
cLabels = ['0到20','20到40','40到60','60到80','80到100','100到120']
data['cut'] = pandas.cut(
data.cost, bins,
right=False,
labels =cLabels
)