24 | 您所在的位置:网站首页 › 如何用数字代替字母Python › 24 |
24_Pandas.DataFrame,Series元素值的替换(replace)
要替换pandas.DataFrame,pandas.Series元素的值,请使用replace()方法。 这里,将描述以下内容。 替换元素一次替换多个不同的元素 在字典中指定在列表中指定注意点 通过指定目标列进行替换用正则表达式替换替换缺失值NaN变更原始项目以下面的数据为例。一些元素的值已更改以作说明。 import pandas as pd df = pd.read_csv('./data/24/sample_pandas_normal.csv') df.iloc[1, 3] = 24 print(df) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 24 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57该示例为pandas.DataFrame,但pandas.Series相同。 替换元素在第一个参数中指定原始元素的值,在第二个参数中指定替换后的值。 print(df.replace('CA', 'California')) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 California 24 # 2 Charlie 18 California 70 # 3 Dave 68 TX 70 # 4 Ellen 24 California 88 # 5 Frank 30 NY 57包括所有列元素。如果您只想替换特定列的值,请参见下文。 print(df.replace(24, 100)) # name age state point # 0 Alice 100 NY 64 # 1 Bob 42 CA 100 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 100 CA 88 # 5 Frank 30 NY 57默认情况下,将返回带有替换元素的新DataFrame,但是如果参数inplace = True,则将更改原始DataFrame。最后,我将介绍一个示例。 一次替换多个不同的元素如果要一次替换多个不同的元素,则可以使用字典或列表。 在字典中指定在第一个参数中指定{原始值:替换后的值}的字典。 print(df.replace({'CA': 'California', 24: 100})) # name age state point # 0 Alice 100 NY 64 # 1 Bob 42 California 100 # 2 Charlie 18 California 70 # 3 Dave 68 TX 70 # 4 Ellen 100 California 88 # 5 Frank 30 NY 57 在列表中指定在第一个参数中指定原始值列表,在第二个参数中指定替换值列表。如果列表的大小(元素数)不匹配,则会发生错误。 print(df.replace(['CA', 24], ['California', 100])) # name age state point # 0 Alice 100 NY 64 # 1 Bob 42 California 100 # 2 Charlie 18 California 70 # 3 Dave 68 TX 70 # 4 Ellen 100 California 88 # 5 Frank 30 NY 57 # print(df.replace(['CA', 24, 'NY'], ['California', 100])) # ValueError: Replacement lists must match in length. Expecting 3 got 2如果将标量值指定为第二个参数,则所有元素都将替换为该值。 print(df.replace(['CA', 24], 'XXX')) # name age state point # 0 Alice XXX NY 64 # 1 Bob 42 XXX XXX # 2 Charlie 18 XXX 70 # 3 Dave 68 TX 70 # 4 Ellen XXX XXX 88 # 5 Frank 30 NY 57 注意点注意多个替换对之间的原始值和替换值是否相同。由于值是按顺序替换的,因此替换的值会进一步替换。结果取决于顺序。 字典示例。 print(df.replace({'CA': 'NY', 'NY': 'XXX'})) # name age state point # 0 Alice 24 XXX 64 # 1 Bob 42 XXX 24 # 2 Charlie 18 XXX 70 # 3 Dave 68 TX 70 # 4 Ellen 24 XXX 88 # 5 Frank 30 XXX 57 print(df.replace({'NY': 'XXX', 'CA': 'NY'})) # name age state point # 0 Alice 24 XXX 64 # 1 Bob 42 NY 24 # 2 Charlie 18 NY 70 # 3 Dave 68 TX 70 # 4 Ellen 24 NY 88 # 5 Frank 30 XXX 57字典的顺序在Python 3.7之后得以保留,但在早期版本中未定义。它并不总是看起来像上面的结果。如果要明确指定顺序,请重复调用replace()。 print(df.replace({'NY': 'XXX'}).replace({'CA': 'NY'})) # name age state point # 0 Alice 24 XXX 64 # 1 Bob 42 NY 24 # 2 Charlie 18 NY 70 # 3 Dave 68 TX 70 # 4 Ellen 24 NY 88 # 5 Frank 30 XXX 57在列表中,第一个元素将首先被替换。当顺序很重要时,使用列表比使用字典更容易。 print(df.replace(['CA', 'NY'], ['NY', 'XXX'])) # name age state point # 0 Alice 24 XXX 64 # 1 Bob 42 XXX 24 # 2 Charlie 18 XXX 70 # 3 Dave 68 TX 70 # 4 Ellen 24 XXX 88 # 5 Frank 30 XXX 57 print(df.replace(['NY', 'CA'], ['XXX', 'NY'])) # name age state point # 0 Alice 24 XXX 64 # 1 Bob 42 NY 24 # 2 Charlie 18 NY 70 # 3 Dave 68 TX 70 # 4 Ellen 24 NY 88 # 5 Frank 30 XXX 57 通过指定目标列进行替换通过将{列名称:{原始值:替换后的值}}的字典指定为第一个参数,只能替换目标列的元素。您可以通过增加字典元素的数量来一次替换多个列和多个值。 print(df.replace({'age': {24: 100}})) # name age state point # 0 Alice 100 NY 64 # 1 Bob 42 CA 24 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 100 CA 88 # 5 Frank 30 NY 57 print(df.replace({'age': {24: 100, 18: 0}, 'point': {24: 50}})) # name age state point # 0 Alice 100 NY 64 # 1 Bob 42 CA 50 # 2 Charlie 0 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 100 CA 88 # 5 Frank 30 NY 57无法在列表中指定原始值和替换后的值。 # print(df.replace({'age': [[24, 18], [100, 0]], 'point': {24: 50}})) # TypeError: If a nested mapping is passed, all values of the top level mapping must be mappings如果要用相同的值替换所有值,请在第一个参数中指定{column name:original value}字典,并在替换后的第二个参数中以标量值指定值。可以将第一个参数的原始值指定为列表。 print(df.replace({'age': 24, 'point': 70}, 100)) # name age state point # 0 Alice 100 NY 64 # 1 Bob 42 CA 24 # 2 Charlie 18 CA 100 # 3 Dave 68 TX 100 # 4 Ellen 100 CA 88 # 5 Frank 30 NY 57 print(df.replace({'age': [24, 18], 'point': 70}, 100)) # name age state point # 0 Alice 100 NY 64 # 1 Bob 42 CA 24 # 2 Charlie 100 CA 100 # 3 Dave 68 TX 100 # 4 Ellen 100 CA 88 # 5 Frank 30 NY 57 用正则表达式替换正则表达式可以与参数regex = True一起使用。 例如,默认情况下,仅在元素值完全匹配时才替换元素值,因此即使它们部分匹配,也不会替换它们。 print(df.replace('li', 'LI')) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 24 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57例如,如果要替换元素的部分字符串,则使用参数regex = True将其设置为正则表达式。 ()中包含的部分可以在替换后按顺序用作组,例如\ 1和\ 2。 print(df.replace('(.*)li(.*)', r'\1LI\2', regex=True)) # name age state point # 0 ALIce 24 NY 64 # 1 Bob 42 CA 24 # 2 CharLIe 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57当regex = True时,将正则表达式模式指定为第一个参数,将替换后的字符串指定为第二个参数。 如果要替换特定列元素的一部分字符串,也可以使用字符串方法str.replace()。 df['name'] = df['name'].str.replace('li', 'LI') print(df) # name age state point # 0 ALIce 24 NY 64 # 1 Bob 42 CA 24 # 2 CharLIe 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57详情请参阅以下文章 13_Pandas字符串的替换和空格处删除等方法 替换缺失值NaN提供了一种名为fillna()的方法来替换缺失值NaN。 尽管可以使用replace(),但fillna()可以根据行或列替换不同的值。 详情请参阅以下文章 05_Pandas删除,替换并提取其中的缺失值NaN 变更原始项目默认情况下,将返回带有替换元素的新DataFrame,但是如果参数inplace = True,则将更改原始DataFrame。 df = pd.read_csv('./data/24/sample_pandas_normal.csv') print(df) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 df.replace('CA', 'California', inplace=True) print(df) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 California 92 # 2 Charlie 18 California 70 # 3 Dave 68 TX 70 # 4 Ellen 24 California 88 # 5 Frank 30 NY 57 |
CopyRight 2018-2019 实验室设备网 版权所有 |