panda之excel操作总结(个人总结)

郭志泽
2023-12-01

panda之excel操作总结(个人总结)

前言

收集了一些经济数据,这个是关于excel的一部分总结

  1. 在特定位置插入列
data.insert(2,'c','')
# 2 :插入的列的位置
# ‘c':待插入列的列名
# ‘ ’:插入的值,这里插入的是空值 
data
Out[56]: 
   a  b c
0  1  2  
1  3  4 
#################
data.insert(0,'d',[1,2])
 
data
Out[71]: 
   d  a  b c
0  1  1  2  
1  2  3  4  
  1. 修改行索引和列索引的数据类型及大小写
excelframe.index.astype(float)# 修改索引的数据类型,也就是行索引
excelframe.columns = [str(x) for x in excelframe.columns] # 统一数据列名称的属性为string
columnlist = excelframe.columns.values.tolist() # change clonmu to list

data.columns = [x.lower() for x in data.columns]
  1. 合并两个frame
ret = pd.concat([df, result]).fillna(0) # fill none with 0
  1. 将行与列索引转换为list
dfname._stat_axis.values.tolist() # 行名称
dfname.columns.values.tolist()    # 列名称
  1. 判断内容是否为nan
    pandas基于numpy,所以其中的空值nan和numpy.nan是等价的。numpy中的nan并不是空对象,其实际上是numpy.float64对象,所以我们不能误认为其是空对象,从而用bool(np.nan)去判断是否为空值,这是不对的。 对于pandas中的空值,我们该如何判断,并且有哪些我们容易掉进去的陷阱,即不能用怎么样的方式去判断呢?
    可以判断pandas中单个空值对象的方式:
    1、利用pd.isnull(),pd.isna();
    2、利用np.isnan();
    3、利用is表达式;
    4、利用in表达式。
    不可以用来判断pandas单个空值对象的方式:
    1、不可直接用==表达式判断;
    2、不可直接用bool表达式判断;
    3、不可直接用if语句判断。
    对于同时多个空值对象的判断和处理:
    1、可以用Series对象和DataFrame对象的any()或all()方法;
    2、可以用numpy的any()或all()方法;
    3、不可以直接用python的内置函数any()和all()方法;
    4、可以用Series或DataFrame对象的dropna()方法剔除空值;
    5、可以用Series或DataFrame对象的fillna()方法填充空值。

示例:

import pandas as pd
import numpy as np

na=np.nan

# 可以用来判断空值的方式
pd.isnull(na)  # True
pd.isna(na)  # True
np.isnan(na)  # True
na is np.nan  # True
na in [np.nan]  # True

# 不可以直接用来判断的方式,即以下结果和我们预期不一样
na == np.nan  # False
bool(na)  # True
if na:
  print('na is not null')  # Output: na is not null

# 不可以直接用python内置函数any和all
any([na])  # True
all([na])  #True
  1. 其他比较好的例子(转载)

# dataframe 访问操作
data = pd.DataFrame(np.arange(16).reshape(4,4),index = list("ABCD"),columns=list('wxyz'))
print(data)
print(data[0:2])       #取前两行数据
print('+++++++++++++1111')

print(len(data))              #求出一共多少行
print(data.columns.size)      #求出一共多少列
print('+++++++++++++2222')

print(data.columns)        #列索引名称
print(data.index)       #行索引名称
print('+++++++++++++3333')

print(data.iloc[1])             #取第2行数据
print('+++++++++++++444')

print(data['x'])      #取列索引为x的一列数据
print(data.loc['A'])      #取第行索引为”A“的一行数据,
print('+++++++++++++555')

print(data.loc[:,['x','z']])          #表示选取所有的行以及columns为a,b的列;
print(data.loc[['A','B'],['x','z']])     #表示选取'A'和'B'这两行以及columns为x,z的列的并集;
print('+++++++++++++6666')

print(data.iloc[1:3,1:3])              #数据切片操作,切连续的数据块
print(data.iloc[[0,2],[1,2]])              #即可以自由选取行位置,和列位置对应的数据,切零散的数据块
print('+++++++++++++7777')

print(data[data>2])       #表示选取数据集中大于0的数据
print(data[data.x>5])       #表示选取数据集中x这一列大于5的所有的行
print('+++++++++++++8888')

a1 = data.copy()
print(a1[a1['y'].isin(['6','10'])])    #表显示满足条件:列y中的值包含'6','8'的所有行。
print('+++++++++++++9999')

print(data.mean())           #默认对每一列的数据求平均值;若加上参数a.mean(1)则对每一行求平均值;
print(data['x'].value_counts())    #统计某一列x中各个值出现的次数:
print('+++++++++++++101010')

print(data.describe()) #对每一列数据进行统计,包括计数,均值,std,各个分位数等。
 类似资料: