300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 如何用pandas对excel中的文本数据进行操作

如何用pandas对excel中的文本数据进行操作

时间:2022-12-20 15:49:03

相关推荐

如何用pandas对excel中的文本数据进行操作

pandas中有Series和DataFrame两种数据结构,Series是一种数组,DataFrame是一种表(每一行数据是一条记录,每一列是一个变量)。

上图整体是一个DataFrame,图中的每一绿色圈中的是一个Series。

在Series中有str方法,本文所有的方法都是在Series对象基础上进行的操作。

Series.str方法

Series.str可以对某一序列中的每个文本数据进行批处理,一般返回的结果是数组。

上面内容看不懂没关系,我们通过代码帮助你理解

import pandas as pd

import numpy as np

df = pd.DataFrame({"From_To": [" LoNDon_paris ", " MAdrid_miLAN ", " londON_StockhOlm ",

"Budapest_PaRis", "Brussels_londOn"],

"FlightNumber": [10045, np.nan, 10065, np.nan, 10085],

"RecentDelays": [[23, 47], [], [24, 43, 87], [13], [67, 32]],

"Airline": ["KLM(!)", "<Air France> (12)", "(British Airways. )",

"12. Air France", ""Swiss Air""]})

df

选择From_To列,得到Series类型数据

df.From_To

Run

0 LoNDon_paris

1 MAdrid_miLAN

2 londON_StockhOlm

3 Budapest_PaRis

4 Brussels_londOn

Name: From_To, dtype: object

upper/lower

将Airline列中的每一项变为大写

df.From_To.str.upper()

Run

0 LONDON_PARIS

1 MADRID_MILAN

2 LONDON_STOCKHOLM

3 BUDAPEST_PARIS

4 BRUSSELS_LONDON

Name: From_To, dtype: object

将From_To列中的每一项变为小写

df.From_To.str.lower()

Run

0 london_paris

1 madrid_milan

2 london_stockholm

3 budapest_paris

4 brussels_london

Name: From_To, dtype: object

len

求From_To列每一项的长度

df.From_To.str.len()

Run

0 14

1 14

2 18

3 14

4 15

Name: From_To, dtype: int64

split分割

对FromTo列中每一项按照""进行切割。注意这里expand参数

df.From_To.str.split("_", expand=True)

df.From_To.str.split("_", expand=False)

Run

0 [ LoNDon, paris ]

1 [ MAdrid, miLAN ]

2 [ londON, StockhOlm ]

3 [Budapest, PaRis]

4 [Brussels, londOn]

Name: From_To, dtype: object

contains

From_To列中每项是否含有"Brussels"这个字段,返回布尔值

df.From_To.str.contains("Brussels")

Run

0 False

1 False

2 False

3 False

4 True

Name: From_To, dtype: bool

startswith

From_To列中每项是否含以"B"作为开头,返回布尔值

df.From_To.str.strip().str.startswith("B")

Run

0 False

1 False

2 False

3 True

4 True

Name: From_To, dtype: bool

endswith

From_To列中每项是否含以"n"作为结尾,返回布尔值

df.From_To.str.strip().str.endswith("m")

Run

0 False

1 False

2 True

3 False

4 False

Name: From_To, dtype: bool

findall

把RecentDelays列中的列表

df.RecentDelays

Run

0 [23, 47]

1 []

2 [24, 43, 87]

3 [13]

4 [67, 32]

Name: RecentDelays, dtype: object

extract

清洗Airline列,使其每一项只拥有字母和空格。我们先看看数据

df

df.Airline.str.extract("([a-zA-Z\s]+)")

使用正则表达式,对From_To列进行提取操作,获得出发地和目的地。

df.From_To.str.extract("([a-zA-Z\s]+)_([a-zA-Z\s]+)")

findall(pat)

查找Series中每一项是否含有pat

s = pd.Series(["Lion", "Monkey", "Rabbit"])

s

Run

0 Lion

1 Monkey

2 Rabbit

dtype: object

查找Series中每一项是否含有Monkey

s.str.findall("Monkey")

Run

0 []

1 [Monkey]

2 []

dtype: object

我们先看看df

df

查找From_To列中是否有Paris

df.From_To.str.lower().str.findall("paris")

Run

0 [paris]

1 []

2 []

3 [paris]

4 []

Name: From_To, dtype: object

replace

将FromTo列中的""换为">"

df.From_To.str.replace("_", " > ")

Run

0 LoNDon > paris

1 MAdrid > miLAN

2 londON > StockhOlm

3 Budapest > PaRis

4 Brussels > londOn

Name: From_To, dtype: object

get

get(i) 获得序列中每一项第i个位置的数据

s1 = pd.Series(["abc", "bed", "aaa", "eee"])

s1

Run

0 abc

1 bed

2 aaa

3 eee

dtype: object

获得s1序列中每项文本的第2个位置的数据

s1.str.get(1)

Run

0 b

1 e

2 a

3 e

dtype: object

获得s1序列中每项文本的最后一个位置的数据

s1.str.get(-1)

Run

0 c

1 d

2 a

3 e

dtype: object

join

join(sep) 按照sep对每一项文本序列数据进行拼接。注意遇到非文本数据,不进行拼接,返回nan

s2 = pd.Series([["lion", "elephant", "zebra"],

[1.1, 2.2, 3.3],

["cat", np.nan, "dog"],

["cow", 4.5, "goat"],

["duck", ["swan", "fish"], "guppy"]])

s2

Run

0 [lion, elephant, zebra]

1 [1.1, 2.2, 3.3]

2 [cat, nan, dog]

3 [cow, 4.5, goat]

4 [duck, [swan, fish], guppy]

dtype: object

将s2中每一项用空格拼接

s2.str.join(" ")

Run

0 lion elephant zebra

1 NaN

2 NaN

3 NaN

4 NaN

dtype: object

cat

Series.str.cat(sep, narep)|按照sep对数组进行合并(如果遇到nan,以narep替代),注意该方法返回字符串

df

将Airline列合并成一个大的字符串,用空格间隔

df.Airline.str.cat(sep=" ")

Run

"KLM(!) <Air France> (12) (British Airways. ) 12. Air France "Swiss Air""

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。