【问题标题】:For Loop not writing into DataFrame (Python)For Loop 未写入 DataFrame (Python)
【发布时间】:2021-05-22 22:07:59
【问题描述】:

我正在尝试分析一些 NBA 数据。我有一个包含数据的 CSV 文件和一个名为“团队”的字段,其中包含团队名称和他们在同一字段中完成的位置。我尝试编写一个 for 循环(如下)来查看最后一个字符以及它是否是一个数字。例如,获得第二名的波士顿凯尔特人队将显示为“波士顿凯尔特人队2”。另一个例子是“New York Knicks11”。

for x in nba['team']:
        while x[-1].isdigit():
            print(x)
            x = x[:len(x)-1]
            print(x)

我包含了打印语句,以确保它正确地对数据进行切片(确实如此)。但它没有写回我的数据框。为什么不将其存储回我的数据框中?

【问题讨论】:

  • x 是一个字符串(当前团队的名称),而不是对数据框单元格的引用。

标签: python loops for-loop while-loop


【解决方案1】:
>>> nba
                  team
0      Boston Celtics2
1    New York Knicks11
2  Los Angeles Lakers7

用''删除尾随数字。

nba['team'] = nba['team'].str.replace('\d+$', '')
>>> nba
                 team
0      Boston Celtics
1     New York Knicks
2  Los Angeles Lakers

【讨论】:

  • 这会从字符串中删除所有数字。如何仅删除字符串末尾的数字?这只是一个问题,因为“费城 76 人队”变成了“费城人队”
  • NVM - 我想通了。只需将 $ 添加到正则表达式的末尾即可。
【解决方案2】:

它不会覆盖您的 DataFrame,因为在您的 for 循环中 x 仅将值的副本存储在您的 nba DataFrame 中。要更改 DataFrame 中的值,您可以使用索引循环并在特定索引处更改 nba:

for i, row in nba.iterrows():
    x = row['team'];
    while x[-1].isdigit():
        print(x)
        x = x[:len(x)-1]
        print(x)
    nba.at[i, 'team'] = x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多