【问题标题】:How to replace values in pandas dataframe如何替换熊猫数据框中的值
【发布时间】:2021-10-24 19:13:05
【问题描述】:

我的目标是创建一个程序来替换 pandas 数据框中的唯一值。

以下代码执行操作

    # replace values
    print(f" {s1['A1'].value_counts().index}")
    for i in s1['A1'].value_counts().index:
        s1['A1'].replace(i,1)

    print(f" {s2['A1'].value_counts().index}")
    for i in s2['A1'].value_counts().index:
        s2['A1'].replace(i,2)

    print("s1 after replacing values")
    print(s1)
    print("******************")
    print("s2 after replacing values")
    print(s2)
    print("******************")

预期: 第一个数据帧s1 中的值应替换为 1。第二个数据框s2中的值应该替换为2s。

实际:

 Int64Index([8, 5, 2, 7, 6], dtype='int64')
 Int64Index([2, 8, 5, 6, 7, 4, 3], dtype='int64')
s1 after replacing values
    A1        A2   A3  Class
3    5  0.440671  2.3      1
9    8  0.070035  2.9      1
14   2  0.868410  1.5      1
29   6  0.587487  2.6      1
34   8  0.652936  3.0      1
38   8  0.181508  3.0      1
45   8  0.953230  3.0      1
54   7  0.737604  2.7      1
68   5  0.187475  2.2      1
70   5  0.511385  2.3      1
71   8  0.688134  3.0      1
73   2  0.054908  1.5      1
87   8  0.461797  3.0      1
90   2  0.756518  1.5      1
91   2  0.761448  1.5      1
93   5  0.858036  2.3      1
94   5  0.306459  2.2      1
98   5  0.692804  2.2      1
******************
s2 after replacing values
    A1        A2   A3  Class
0    2  0.463134  1.5      3
1    8  0.746065  3.0      3
2    6  0.264391  2.5      2
4    2  0.410438  1.5      3
5    2  0.302902  1.5      2
..  ..       ...  ...    ...
92   5  0.775842  2.3      2
95   5  0.844920  2.2      2
96   5  0.428071  2.2      2
97   5  0.356044  2.2      3
99   5  0.815400  2.2      3

我想了解如何替换这些数据框中的值。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    鉴于有关替换方法的文档,这可能会令人困惑。您需要重新分配数据框。

    # replace values
        print(f" {s1['A1'].value_counts().index}")
        for i in s1['A1'].value_counts().index:
            print(f"s1['A1'].replace({i},1)")
            s1['A1'] = s1['A1'].replace(i,1)
    
        print(f" {s2['A1'].value_counts().index}")
        for i in s2['A1'].value_counts().index:
            print(f"s2['A1'].replace({i},2)")
            s2['A1'] = s2['A1'].replace(i,2)
    

    文档没有这样说:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.replace.html

    【讨论】:

    • 该文档包含“Returns: DataFrame Object after replacement”。如果不需要重新分配 df,请使用 inplace=True 参数
    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 2023-03-12
    • 2018-09-29
    • 2021-07-22
    • 1970-01-01
    • 2022-06-24
    • 2022-01-11
    相关资源
    最近更新 更多