python - 在两个不同的 pandas 数据帧之间搜索和替换值

标签 python pandas dataframe data-science

我使用两个不同的 pandas 数据框:

数据框1:

      Year          State    EMW
0     1968        Alabama   8.55
1     1968         Alaska  15.61
2     1968        Arizona   8.55
3     1968       Arkansas   8.55
4     1968     California  12.26
...    ...            ...    ...
2857  2020       Virginia   7.25
2858  2020     Washington  13.50
2859  2020  West Virginia   8.75
2860  2020      Wisconsin   7.25
2861  2020        Wyoming   7.25

和 dataframe2:

                         NAME            STATUS    ISO ANSI1  ANSI2 USPS
0                     Alabama             State  US-AL    AL      1   AL
1                      Alaska             State  US-AK    AK      2   AK
2                     Arizona             State  US-AZ    AZ      4   AZ
3                    Arkansas             State  US-AR    AR      5   AR
4                  California             State  US-CA    CA      6   CA
5                    Colorado             State  US-CO    CO      8   CO
6                 Connecticut             State  US-CT    CT      9   CT
7                    Delaware             State  US-DE    DE     10   DE
8        District of Columbia  Federal district  US-DC    DC     11    q
9                     Florida             State  US-FL    FL     12   FL
...                       ...               ...    ...    ...    ...  ...

我正在尝试做什么:

dataframe1 中“State”列中的所有值替换为 dataframe2 中的等效 ANSI1 代码。

基本上,我希望得到这样的结果:

Alabama -> AL
Alaska -> AK
Arizona -> AZ

等等。

出于某种原因,到目前为止我尝试过的方法都不起作用。

我尝试过的:

  1. 单行 for 循环

[dataframe1.replace({'State' : {dataframe2.loc[i]['NAME'] : dataframe2.loc[i][ANSI1']}},inplace = True) 对于范围内的 i (0, len(dataframe2))]

  • 等效的嵌套循环结构:
  •     for state_name in pd.unique(dataframe1['State']):
            for ansi_name in dataframe2['ANSI1']:
                if ansi_name == state_name :
                    dataframe1.replace({'State' : { state_name : ansi_name }}, inplace = True)
    

    注意 我怀疑我可能正在尝试比较不同的类型,所以我尝试了:

    dataframe1.replace({'State' : {'Alabama' : 'AL'}}, inplace=True) 
    

    果然,它成功了。

    编辑:

    创建字典

    dState = dict(df1[['NAME', 'ANSI1']].values)

    生成一个字典,其中的值如下:

    {'\xa0Alabama': 'AL', '\xa0Alaska': 'AK', '\xa0Arizona': 'AZ', '\xa0Arkansas': 'AR', '\xa0California': 'CA', '\x
    a0Colorado': 'CO', '\xa0Connecticut': 'CT', '\xa0Delaware': 'DE', ' District of Columbia': 'DC', ' Florida': 'FL
    ', '\xa0Georgia': 'GA', '\xa0Hawaii': 'HI', '\xa0Idaho': 'ID', '\xa0Illinois': 'IL', '\xa0Indiana': 'IN', '\xa0I
    owa': 'IA', '\xa0Kansas': 'KS', '\xa0Kentucky': 'KY', '\xa0Louisiana': 'LA', '\xa0Maine': 'ME', '\xa0Maryland':
    'MD', '\xa0Massachusetts': 'MA', '\xa0Michigan': 'MI', '\xa0Minnesota': 'MN', '\xa0Mississippi': 'MS', '\xa0Miss
    ouri': 'MO', '\xa0Montana': 'MT', '\xa0Nebraska': 'NE', '\xa0Nevada': 'NV', '\xa0New Hampshire': 'NH', '\xa0New
    Jersey': 'NJ', '\xa0New Mexico': 'NM', '\xa0New York': 'NY', '\xa0North Carolina': 'NC', '\xa0North Dakota': 'ND
    ', '\xa0Ohio': 'OH', '\xa0Oklahoma': 'OK', '\xa0Oregon': 'OR', '\xa0Pennsylvania': 'PA', '\xa0Rhode Island': 'RI
    ', '\xa0South Carolina': 'SC', '\xa0South Dakota': 'SD', '\xa0Tennessee': 'TN', '\xa0Texas': 'TX', '\xa0Utah': '
    UT', '\xa0Vermont': 'VT', '\xa0Virginia': 'VA', '\xa0Washington': 'WA', '\xa0West Virginia': 'WV', '\xa0Wisconsi
    n': 'WI', '\xa0Wyoming': 'WY', ' Puerto Rico': 'PR', ' U.S. Virgin Islands': 'VI', ' Guam': 'GU', ' Northern Mar
    iana Islands': 'MP', ' American Samoa': 'AS'}
    

    所以现在我无法通过将它们与 df1['State'] 中的值进行比较来得到任何结果

    我现在开始怀疑我可能在导入 df2 的 csv 编码中遗漏了某些内容。

    最佳答案

    这个问题可以通过使用数据帧操作通过几个简单的步骤来完成

    1. 从 df2 中提取您将使用的数据
    2. 合并数据框
    3. 删除不必要的值

    代码中的代码看起来像这样。

    第 1 步:

    df2_use = df2[['Name','ANSI1']]
    

    第 2 步:

    df1.merge(df2_use , how='left', right_on='Name', left_on='State')
    

    第 3 步:

    df1 = df1.drop(['Name','State'], axis=1).rename(columns={'ANSI1': 'State')
    

    您将获得您正在寻找的数据框

    关于python - 在两个不同的 pandas 数据帧之间搜索和替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66017014/

    相关文章:

    Python pytest unittest.TextTestRunner 不运行特定套件

    python - 如何防止单个用户多次投票

    python - 附加从文件中读取的多个 pandas DataFrame

    python - Pandas:以均匀间隔向索引添加元素

    Python Pandas CSV 删除特定列中的所有字符串

    r - 在 R 中识别行程的起点和终点

    python - 如何将 [[A, B], [A, C], [A, D]] 列表转换为 Python 中的 {A : [B, C, D]} 字典?

    python - 如何使用 Python 创建输入框?

    python - Matplotlib 数据框图上缺少 X 轴标签

    r - 使用 plotly rstudio 从数据框创建漏斗图