【Python强化】pandas处理excel数据

python操作excel表格文件的增删读写,一般需要用到的第三方库有xlwt,xlrd。xlrd负责读取excel,xlwt负责写入excel文件。这种操作方法比较繁琐,效率还不错,通俗易懂。

Pandas是xlwt,xlrd库的封装库,拥有更全面的操作对象,csv,excel,dataframe等等。在xlwt等读写库的基础上可以实现一个库操作不同格式的文件。

pandas依赖处理Excel的 xlrd模块,所以我们需要提前安装这个,安装命令是:

pip install xlrd

表格内容:

numbernameagescoresex1lhh24100男2wcy2899女3lfg5698男4zzy5297女


import pandas as pd

data= pd.read_excel("demo.xlsx")
print(data)

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

one = data.iloc[3,3]
two = data.iloc[0,2]
print(one,two)

输出:

   number name  age  score sex
0       1  lhh   24    100   男
1       2  wcy   28     99   女
2       3  lfg   56     98   男
3       4  zzy   52     97   女
97 24
  • *获取前几条数据

data = data.head()
print(data)

data = pd.read_excel("demo.xlsx",sheet_name=0)
print(data)

输出:

   number name  age  score sex
0       1  lhh   24    100   男
1       2  wcy   28     99   女
2       3  lfg   56     98   男
3       4  zzy   52     97   女
   number name  age  score sex
0       1  lhh   24    100   男
1       2  wcy   28     99   女
2       3  lfg   56     98   男
3       4  zzy   52     97   女
  • 获取所有的表中数据,返回一个list

value = data.values
print(value)

输出:

[[1 'lhh' 24 100 '男']
 [2 'wcy' 28 99 '女']
 [3 'lfg' 56 98 '男']
 [4 'zzy' 52 97 '女']]
  • 输出指定行的数据
df = pd.read_excel("demo.xlsx")

data = df.iloc[0].values
print(data)

输出:

[1 'lhh' 24 100 '男']
  • loc[row,cloumn] 先行后列 : 是全部行或列,一般多行可以用中括号,连续的可以用a:c等
  • iloc[index,columns] 行索引,列索引,索引都是从0开始,用法是一样的

df = pd.read_excel("demo.xlsx")

data = df.loc[1:2]
print(data)

输出:

   number name  age  score sex
1       2  wcy   28     99   女
2       3  lfg   56     98   男
  • 读取第一行第二列的值
df = pd.read_excel("demo.xlsx")
data = df.iloc[1,2]
print(data)

输出:

28
  • 读取第二行第三行和第3列第4列的值

输出:

[[28 99]
 [56 98]]
  • 读取第二行和第三行指定”score”和”age”列的数据
df = pd.read_excel("demo.xlsx")
data = df.loc[[1,2],["score","age"]].values
print(data)

输出:

[[99 28]
 [98 56]]
  • 读取指定列的数据

df = pd.read_excel("demo.xlsx")
data = df.loc[:,["score","age"]].values
print(data)

输出:

[[100  24]
 [ 99  28]
 [ 98  56]
 [ 97  52]]

df=pd.read_excel('demo.xlsx')
print("输出行号列表",df.index.values)
print("输出列好列表",df.columns.values)

print("输出:",df.sample(3).values)
输出行号列表 [0 1 2 3]
输出列好列表 ['number' 'name' 'age' 'score' 'sex']
输出: [[3 'lfg' 56 98 '男']
 [4 'zzy' 52 97 '女']
 [2 'wcy' 28 99 '女']]

df=pd.read_excel('demo.xlsx')
print("输出值",df['score'].values)

输出:

输出值 [100  99  98  97]
  • excel数据转字典

df=pd.read_excel('demo.xlsx')
test_data=[]
for i in df.index.values:

    row_data=df.loc[i,['number','name','score','age','sex']].to_dict()
    test_data.append(row_data)
print("输出".format(test_data))

输出:

输出: [{'number': 1, 'name': 'lhh', 'score': 100, 'age': 24, 'sex': '男'}, {'number': 2, 'name': 'wcy', 'score': 99, 'age': 28, 'sex': '女'}, {'number': 3, 'name': 'lfg', 'score': 98, 'age': 56, 'sex': '男'}, {'number': 4, 'name': 'zzy', 'score': 97, 'age': 52, 'sex': '女'}]
  • 去除全部带空值 的行
df = pd.read_excel('demo.xlsx')
print(df)
data = df.dropna()
print(data)

输出:

   number name   age  score   sex
0       1  lhh  24.0  100.0     男
1       2  wcy  28.0   99.0     女
2       3  lfg  56.0   98.0     男
3       4  zzy  52.0   97.0     女
4       5   dw   NaN    NaN  dwdw
   number name   age  score sex
0       1  lhh  24.0  100.0   男
1       2  wcy  28.0   99.0   女
2       3  lfg  56.0   98.0   男
3       4  zzy  52.0   97.0   女
  • 对空值进行填充

df = pd.read_excel('demo.xlsx')
print(df)
df["age"].fillna(0,inplace=True)
print(df)

输出:

   number name   age  score   sex
0       1  lhh  24.0  100.0     男
1       2  wcy  28.0   99.0     女
2       3  lfg  56.0   98.0     男
3       4  zzy  52.0   97.0     女
4       5   dw   NaN    NaN  dwdw
   number name   age  score   sex
0       1  lhh  24.0  100.0     男
1       2  wcy  28.0   99.0     女
2       3  lfg  56.0   98.0     男
3       4  zzy  52.0   97.0     女
4       5   dw   0.0    NaN  dwdw
  • 去除字符串的空格
df['name'] = df['name'].map(str.strip)
print(df)
  • 字符串大小写转换
df['name'] = df['name'].map(str.lower)
print(df)
  • 更改数据格式
df['name'].fillna(0).astype("int")
  • 更改列的名称
df.rename(columns={"name":"username"},inplace=True)
print(df)
  • 删除重复数据
df['age'].drop_duplicates(inplace=True)
df['age'].drop_duplicates(inplace=True,kepp="last")
print(df)
  • 列举前几条数据

data = df.tail(3)
print(data)
  • 打印第几行的数据

print(data.loc[3])
  • 打印第几行的数据第几列的数据

print(data.loc[3,column_1])

print(data.loc[2:4,"name":"sex"])
  • 统计出现的次数

data = df.name.value_counts()
print(data)
  • 给每个列应用一个函数 apply()用法

f = lambda x : x-20
df["age"] = df["age"].apply(f)
print(df)
  • 给每个元素应用一个函数applymap()函数

  • 遍历行和列的数据


for i,row in df.iterrows():
    print(i,row)
  • map函数用法
df["name"] = df["name"].map(lambda name:name+"wo")
print(df)
  • 选择指定的列重新输出
df = pd.read_excel("demo.xlsx")
df.loc[:,"name":"score"].to_excel("3列输出.xlsx")
  • 添加行头
df = pd.read_excel("demo.xlsx",header=None,names=["序号","姓名","年龄","分数","性别"])
df.to_excel("title.xlsx",index=False)
print(df)
  • objs(必须参数):参与连接的pandas对象的列表或字典
  • axis:指明连接的轴向,默认为0
  • join:选中inner或outer(默认),其它轴向上索引是按交集(inner)还是并集(outer)进行合并
  • join_axes:指明用于其他N-1条轴的索引,不执行并集/交集运算
  • keys:与连接对象有关的值,用于形成连接轴向上的层次化索引
  • verify_integrity:是否去重
  • ignore_index:是否忽略索引
frames = [df1,df2,df3]
result = pd.concat(frames)
result = pd.concat(frames,keys=["x","y","z"])
df = pd.read_excel("demo.xlsx")
df.iloc[2:4,:].to_excel("demo01.xlsx")
data = pd.read_excel("demo01.xlsx")
frames = [df,data]
content = pd.concat(frames,keys=["one","two"],ignore_index=True,verify_integrity=True)
print(content)

输出:

   number name   age  score   sex  Unnamed: 0
0       1  lhh  24.0  100.0     男         NaN
1       2  wcy  28.0   99.0     女         NaN
2       3  lfg  56.0   98.0     男         NaN
3       4  zzy  52.0   97.0     女         NaN
4       5   dw   NaN    NaN  dwdw         NaN
5       3  lfg  56.0   98.0     男         2.0
6       4  zzy  52.0   97.0     女         3.0

新增一行表进行连接


df2 = pd.DataFrame({"number":10,"name":"www","age":30,"score":1000},index=[1])
print(df2)
result = pd.concat([df,df2],axis=0,ignore_index=True)
print(result)

输出:

   number name   age  score   sex
0       1  lhh  24.0  100.0     男
1       2  wcy  28.0   99.0     女
2       3  lfg  56.0   98.0     男
3       4  zzy  52.0   97.0     女
4       5   dw   NaN    NaN  dwdw
   number name  age  score
1      10  www   30   1000
   number name   age   score   sex
0       1  lhh  24.0   100.0     男
1       2  wcy  28.0    99.0     女
2       3  lfg  56.0    98.0     男
3       4  zzy  52.0    97.0     女
4       5   dw   NaN     NaN  dwdw
5      10  www  30.0  1000.0   NaN

新增一列数据进行连接

\#新建一列进行合并
df3 = pd.DataFrame({"index":[2,3,4,5,6]})
result = pd.concat([df,df3],axis=1)
print(result)

输出:

   number name   age  score   sex
0       1  lhh  24.0  100.0     男
1       2  wcy  28.0   99.0     女
2       3  lfg  56.0   98.0     男
3       4  zzy  52.0   97.0     女
4       5   dw   NaN    NaN  dwdw
   number name   age  score   sex  index
0       1  lhh  24.0  100.0     男      2
1       2  wcy  28.0   99.0     女      3
2       3  lfg  56.0   98.0     男      4
3       4  zzy  52.0   97.0     女      5
4       5   dw   NaN    NaN  dwdw      6

常见的集中用法


result = pd.concat([df1,df4],axis=1,join="inner")   列是增加,行是交集`

pd.concat([df1,df4],axis=1,join_axes=[df1.index])  列是增加,行以df1为准,空的为NaN

result = df.append(result,ignore_index=True)
print(result)

s1 = pd.Series(["a","a","a","a","a"],name="x")
result = pd.concat([df,s1],axis=1)
print(result)

输出:

   number name   age  score   sex
0       1  lhh  24.0  100.0     男
1       2  wcy  28.0   99.0     女
2       3  lfg  56.0   98.0     男
3       4  zzy  52.0   97.0     女
4       5   dw   NaN    NaN  dwdw
   number name   age  score   sex  x
0       1  lhh  24.0  100.0     男  a
1       2  wcy  28.0   99.0     女  a
2       3  lfg  56.0   98.0     男  a
3       4  zzy  52.0   97.0     女  a
4       5   dw   NaN    NaN  dwdw  a

print(df)
df = df[df["age"].isin([24,28])]
print(df)
   number name   age  score sex
0       1  lhh  24.0  100.0   男
1       2  wcy  28.0   99.0   女

print(df)
df = df[df["age"].isin([24,28])]
print(df)
   number name   age  score   sex
2       3  lfg  56.0   98.0     男
3       4  zzy  52.0   97.0     女
4       5   dw   NaN    NaN  dwdw

result = df.iloc[:, :len(df.columns) - 1]
print(result)

one = result[result["age"].isin([24])]
two = result[result["age"].isin([28])]
three = result[result["age"].isin([52])]
four = result[result["age"].isin([50])]
writer = pd.ExcelWriter("数据筛选.xlsx")
result.to_excel(writer, sheet_name="all", index=False)
one.to_excel(writer, sheet_name="one", index=False)
two.to_excel(writer, sheet_name="two", index=False)
three.to_excel(writer, sheet_name="three", index=False)
four.to_excel(writer, sheet_name="four", index=False)
writer.save()

Original: https://blog.csdn.net/qq_38140292/article/details/121134465
Author: 指尖听戏
Title: 【Python强化】pandas处理excel数据

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

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

(0)

大家都在看

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