pandas的其他函数
修改日期为统一格式:pd.to_datetime(YY-MM-DD)**
to_datetime(arg, errors=‘raise’, dayfirst=False, yearfirst=False, utc=None, box=True, format=None, exact=True, unit=None, infer_datetime_format=False, origin=‘unix’, cache=True)
其中需要注意,format=’%Y%m%d’,为固定格式,不能修改Y,m,d大小写,例如format=’%Y年%m月%d日’也是一种和‘2019年8月4日’匹配的形式;若出现格式不匹配的情况,可以在报错中查看修改。且这些只是返回了视图,并没有修改原数据,可以将这个视图数据赋值给别的变量
import pandas as pd
import numpy as np
df=pd.read_csv('my_csv_date.csv',encoding='gb2312', na_values=['null','None'])
print(pd.to_datetime(df["date"],format='%Y/%m/%d'))
'''
0 2018-03-01
1 2018-04-01
2 2018-03-01
3 2018-05-01
4 2017-03-01
5 2017-04-01
6 2017-05-01
7 2019-03-01
8 2019-04-01
9 2019-05-01
Name: date, dtype: datetime64[ns]
'''
读取csv文件,pd.read_csv ()
read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]], sep=’,’, delimiter=None, header=‘infer’, names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression=‘infer’, thousands=None, decimal=b’.’, lineterminator=None, quotechar=’"’, quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
主要参数含义:
filepath_or_buffer: 打开的 文件的路径和文件名
sep: 分割符
**delimiter:**定界符,若指定,则sep属性失效
**header:**为整数,指定哪一行为表头,默认为0(第一行)
**prefix:**给列明前加字符串前缀
**encoding:**表示数据读取的编码方式
**skiprows:**跳过的行数
**na_values:**需要忽略的字符串,中文字符串无法忽略
字符串替换函数 df[‘某一列的属性名’].str.replace(‘旧值’,‘新值’)
将新的字符串代替旧的字符串
import pandas as pd
import numpy as np
df=pd.read_csv('my_csv_date.csv',encoding='gb2312',\
na_values=['null','None'])
print(df)
print(df['价格'])
#将字符串的最后一位舍去,且转换为float型![在这里插入图片描述](https://img-
print(df['价格'].str[:-1].astype('float'))
df['名字']=df['名字'].str.replace('大山','错误')
print(df['名字'])
对出现数据次数统计,df[‘某一列的属性名’].value_counts()
df.dtypes,返回df数据的每个列的数据类型
df.describe(include=’ '),返回对数据总体描述
包含数量,均值,标准差,最小值,分位数,最大值
include值的含义:
**默认时,**返回只对数值型数据统计;
**object:**表示对字符数据统计;
**all:**表示对所有数据统计
import pandas as pd
import numpy as np
# print(help(pd.read_csv))
df=pd.read_csv('my_csv_date.csv',encoding='gb2312',\
na_values=['null','None'])
print(df)
print(df['价格'].value_counts())
print(df.dtypes)
print(df.describe())
print(df.describe(include='object'))
print(df.describe(include='all'))
pd.datetime.today(),返回现在时间
可以显示如下时间,也可使用pd.datetime.today().year(或month,hour,minute,)访问今天的年,月,日
print(pd.datetime.today())
#2020-03-17 07:33:50.063112
使用apply隐藏部分数据
下面的程序,将11位电话号码的第四位到第7位用星号代替
print(df['电话'].apply(lambda x:x.replace(x[3:7],'****')))
使用df.sample(n=,replace=)抽样数据
从数据中replace(false不放回)抽取n个数据
插入一列计算数据,列之间相乘np.prod
先读取数据,后对数据进行随机选择,然后对数据处理
import pandas as pd
import numpy as np
df=pd.read_csv('my_csv_date.csv',encoding='gb2312',\
na_values=['null','None'],\
dtype={'电话':str,})
print(df)
data=df.sample(n=5,replace=False)
data['总价']=data[['单价','数量']].apply(np.prod,axis=1)
print(data[['单价','数量','总价']])
从上图可以看出,没有对索引进行初始化,并且添加计算了总价
求取数值变化率的函数group_data[‘总价变化率’].pct_change()
分类后的数据,某一列数据的变化率(浮点型),
import pandas as pd
import numpy as np
df=pd.read_csv('my_csv_date.csv',encoding='gb2312',\
na_values=['null','None'],\
dtype={'电话':str,})
print(df)
data=df.sample(n=5,replace=False)
data['总价']=data[['单价','数量']].apply(np.prod,axis=1)
group_data=data.groupby(by='date').sum()
group_data['总价变化率']= group_data['总价'].pct_change()
print(group_data)
通过设置将date列作索引的分组,并将数据求和之后再对求和后的数据计算出变化率
移动平均group_data[‘总价’].rolling(3).mean()
表示几个数据的移动平均group_data指的是按照自己要求分组的数据,总价是数据表中想要滚动计算其中一列中某几行数据的平均(mean),这里是3行,接着上一个程序
group_data['rolling']=group_data['总价'].rolling(3).mean()
print(group_data[["单价","数量","总价","rolling"]])
可以发现前两行没有数据,因为这是3行计算平均值
将某列整体向下平移group_data[‘总价’].shift(1)
上面表示,将总价的一列整体向下移动1位,整体数据图,参考前面较多数据的图,从下图知道,总价列下移一格,第一行无数据
当shift()的参数是负值时,表示向上平移
print(group_data[["单价","数量","总价"]])
group_data['总价']=group_data['总价'].shift(1)
print(group_data[["单价","数量","总价"]])
使用.shift()函数实现.pct_change()的功能
计算方式:前一个数据减去后一个数据后,再除以前一个数据
group_data['per_pct']=(group_data['总价'].shift(1)-group_data['总价'])/group_data['总价'].shift(1)
print(group_data['per_pct'])
print(group_data['总价'].pct_change())