Python Pandas操作

文章目录

*
一、索引操作
二、四则运算
三、Pandas画图
四、文件读取与存储
五、缺失值处理
六、去重
七、数据离散化
八、数据合并
九、交叉表与透视表
十、分组聚合
十一、写入Excel不同Sheet页

一、索引操作

针对DataFrame的索引,有三种检索方式:

  • 直接使用索引值;
  • loc:先行后列,索引值
  • iloc:先行后列,索引值的下标

首先创建一个DataFrame

df = pd.DataFrame({
    "class":[1,2,3],
    "name":['john','mary','sam'],
    'age':[18,19,20]
},index=['class1','class2','class3'])
df['class']['class1']
df.loc['class1':'class2','name']
df.iloc[:2,:]

二、四则运算

Python Pandas操作

算术运算
某列值加10

data['close'].add(10).head()

逻辑运算
\>&#x3001;\<、|、&< code><!--、|、&<-->

data['open'] > 20
data[data['open'] > 20]

data[(data['open'] > 20) & (data['open'] < 24)]

逻辑运算函数

data.query('open20').head()

data['open'].isin([23.53,23.85])
data[data['open'].isin([23.53,23.85])]

统计运算

data.sum()
data.median()
data.mean()
data.mode()
data.idxmax()
data.idxmin()

累计统计函数

cumsum -->&#x8BA1;&#x7B97;&#x524D;1/2/3/.../n&#x4E2A;&#x6570;&#x7684;&#x548C;
cumprod -->&#x8BA1;&#x7B97;&#x524D;1/2/3/.../n&#x4E2A;&#x6570;&#x7684;&#x79EF;
cummax -->&#x8BA1;&#x7B97;&#x524D;1/2/3/.../n&#x4E2A;&#x6570;&#x7684;&#x6700;&#x5927;&#x503C;
cummin -->&#x8BA1;&#x7B97;&#x524D;1/2/3/.../n&#x4E2A;&#x6570;&#x7684;&#x6700;&#x5C0F;&#x503C;
stock_rise = data['p_change']

stock_rise = stock_rise.cumsum()

stock_rise.plot()
plt.show()

自定义运算
apply + lambda

data[['open','close']].apply(lambda x:x.max()-x.min(),axis = 1)

三、Pandas画图

kind:指定图类型
DataFrame.plot(x=None,y=None,kind='line')

line
bar
barh
hist
pie
scatter

四、文件读取与存储

csv
&#x8BFB;&#x53D6;

DataFrame.read_csv(path=None,seq=',',usecols=)

seq:指定分隔符,默认’,’;
usecols:指定读取的列名,列表形式
例如:

pd.read_csv('./stock_day.csv',usecols=['open','high'])

&#x5199;&#x5165;


data2[:10].to_csv('./test.csv',columns=['open'],index=False)

HDF5
有限选择使用HDF5文件存储:

  • HDF5在存储时支持压缩,使用的方式是blosc,这个是速度最快也是pandas默认支持的;
  • 使用压缩可以提高磁盘的利用率,节省空间;
  • HDF5还是跨平台的,可以轻松迁移到hadoop上使用;

&#x8BFB;&#x53D6;

pandas.read_hdf(path_or_buff,key=None,**kwargs)

key:读取的键
&#x5199;&#x5165;
保存的文件是 xxx.h5格式

to_hdf(path,key)

JSON
&#x8BFB;&#x53D6;

pd.read_json()

&#x5199;&#x5165;

&#x5BF9;&#x8C61;.to_json()

在进行写入和读取时,需要注意的参数:
orient:按照指定方式进行读写
lines:是否按照行读取和写入,一般为True。

五、缺失值处理

判断是否有缺失值


np.any(df.isnull())

np.all(df.notnull())

删除缺失值:dropna()

df.dropna()

替换缺失值:fillna(value,inplace=True)
inplace:是否在原数据(DataFrame)上替换。
1.&#x7F3A;&#x5931;&#x503C;&#x4E3A;&#x7A7A;&#x503C;&#x7684;&#xFF1A;None


df["Revenue (Millions)"].fillna(value=movie["Revenue"].mean(),inplace=True)

针对数据量过多,无法判断缺失值在哪一列时:


for i in movie.columns:
    if np.any(movie[i].isnull()) == True:

    movie[i].fillna(value =movie[i].mean(),inplace=True)

2.&#x7F3A;&#x5931;&#x503C;&#x662F;&#x5176;&#x4ED6;&#x7B26;&#x53F7;
把符号替换为None后处理

df= df.replace(to_replace="?",value=np.NaN)

六、去重

df["Director"].unique()
df["Director"].drop_duplicates()

七、数据离散化

含义:根据数据的属性,把其划分为不同的离散区间,用符号或者整数代表每个区间的属性。
例如:

Python Pandas操作

转换为:

Python Pandas操作
这里以股票涨跌幅为例:
Python Pandas操作

pd.qcut(data,q):
a.对数据进行分组将数组分组,一般会与value_counts搭配使用,统计每组的个数;
b.q:大致分为多少组
c.series.value_counts():统计分组次数

自动分组:


data_p = data["p_change"]
qcut_r = pd.qcut(data_p,10)

qcut_r.value_counts()

自定义分组:


bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]

cut_r = pd.cut(data_p,bins=bins)

cut_r.value_counts()

股票涨跌幅分组数据变成one-hot编码
把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1,所以又称为热编码。
pd.get_dummies(data,prefix=None)
prefix:给各列标题附加一个前缀,用’_’拼接。

pd.get_dummies(cut_r,prefix="change")

Python Pandas操作

八、数据合并

pandas.concat([data1,data2],axis=1)

axis=1:列合并 –>类似于SQL中的 join
axis=0:行合并 –>类似于SQL中的 union() (默认)

pandas.merge(left,right,how='inner',on=None,left_on=None,right_on=None)

how:连接方式:left,right,inner(默认),outer。
对应SQL中的join方式:
left –> left join
right –> right join
inner –> join
outer –> full join

九、交叉表与透视表

pd.crosstab()–>返回具体数量
对象.pivot_table()–>返回占比情况


time = pd.to_datetime(data.index)

data['week'] = time.weekday

data['p_n'] = np.where(data['p_change']>0,1,0)

count = pd.crosstab(data['week'],data['p_n'])

sum = count.sum(axis=1)

per = count.div(sum,axis=0)

per.plot(kind="bar",stacked=True)

data.pivot_table(['p_n'],index='week')

Python Pandas操作

十、分组聚合

DataFrame.groupby(key,as_index=False)

col =pd.DataFrame({'color': ['white','red','green','red','green'], 'object': ['pen','pencil','pencil','ashtray','pen'],'price1':[5.56,4.20,1.30,0.56,2.75],'price2':[4.75,4.12,1.60,0.75,3.15]})

col.groupby(['color'])["price1"].mean()

col['price1'].groupby(col['color']).mean()

col.groupby(['color'],as_index = False)["price1"].mean()

col.groupby(['color','object']).count()

需要注意的是,如果只是简单的进行分组,即 col.groupby(['color'])["price1"]或者 col.groupby(['color'])输出的是地址值,没有具体的数据,需要进行基本运算后(mean/count/sum等),才可以得出结果。
除此之外,如果我们想查看每个分组后的结果,我们可以遍历获取值,例如:

for i,j in col.groupby(['color']):
    print('分组名称:',i)
    print('分组结果:',j)

得到的结果:

Python Pandas操作

十一、写入Excel不同Sheet页

一般的写入方式相信大家都已经基本掌握,这里介绍如何同时写入Excel文件中不同sheet页中的方式。
我们主要是通过 pandas.ExcelWriter来保存我们需要写入的文件地址。


file_path = 'D:/Test/test.xlsx'

writePath = pd.ExcelWriter(file_path,engine='xlsxwriter')

df1.to-excel(writePath,index=False,sheet_name='test1')
df2.to-excel(writePath,index=False,sheet_name='test2')

Original: https://blog.csdn.net/qq_43012693/article/details/124895004
Author: 小五家的二哈
Title: Python Pandas操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/755668/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球