繁体   English   中英

更新 csv 文件中特定列中的行 (Python)

[英]Updating rows in a specific column in a csv file (Python)

我目前正在处理一个非常大的 CSV 文件。 我只想更新第一列中的空白行。 我想遍历每一行并使用前一列的值更新每一行(在第 1 列中)。

例如:正如您在第一列中看到的,第一行(不包括标题)是migrations ,我希望下面的 2 个空白行也显示migrations 然后是oauth_token_scopes ,我希望用oauth_token_scopes填充它之后的空白行。 如果这是可能的,我将非常感谢您的帮助!

CSV文件

您可以使用pd.read_csv(filename)将 csv 导入到 pandas 数据帧中,然后使用 pandas fillna 下面的例子:

import pandas as pd

df = pd.DataFrame({"TableNames": ["migrations", None, None, "oauth_access_token_scopes", None, None, None],
                   "HeaderNames": [None, "migration", "batch", None, "id", "access_token_id", "scope_id"],
                  })
df["TableNames"] = df["TableNames"].fillna(method="ffill")

首先,将 CSV 读入 Python 中的 2D 列表。 然后循环遍历要编辑的列并将最后一个填充单元格的值存储在内存中,将该值粘贴到所有空白行中,直到到达具有值的新单元格。

像这样的东西:

csv_list = [["Stuff", "  ", "", "", "Other Stuff", "", "", "Final"], ["whatever", "x", 
"    ", "   ", "", "     ", "", ""]] # Here we are assuming that columns are the primary index
print("List before filling in blanks: ", csv_list)
prev_val = csv_list[0][0] # Assume first cell is not blank
for i in range(len(csv_list[0]) - 1): # Loop through first column
    if csv_list[0][i].strip() == "": # Check if cell is empty
        csv_list[0][i] = prev_val # Fill in cell if empty
    else:
        prev_val = csv_list[0][i] # Set new prev_val if cell is not empty
print("After: ", csv_list)

哪个打印:

List before filling in blanks:  [['Stuff', '  ', '', '', 'Other Stuff', '', '', 'Final'],
                                 ['whatever', 'x', '    ', '   ', '', '     ', '', '']]
After:  [['Stuff', 'Stuff', 'Stuff', 'Stuff', 'Other Stuff', 'Other Stuff', 'Other Stuff', 'Final'], 
         ['whatever', 'x', '    ', '   ', '', '     ', '', '']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM