【问题标题】:How to create new file from two other csv files?如何从其他两个 csv 文件创建新文件?
【发布时间】:2019-02-20 03:54:48
【问题描述】:

我有两个 .csv 文件。

第一:
上校名称:'student_id''mark'

第二:
上校姓名:'student_id','name','surname'

我想用'student_id''name''surname' 创建第三个.csv 文件,其中row['mark'] == 'five''four'

good_student=[]

for index, row in first_file.iterrows():
    if row['mark'] == 'five':
        good_student.append(row['studentId'])
    elif row['mark'] == 'four':
        good_student.append(row['studentId'])

for index, row in second_file.iterrows():
    for i in good_student:
        if row['studentId'] == i:

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    正如其他用户所建议的那样,数据框是处理 csv 问题的可靠方法。首先,我会使用read_csv 函数将两个 csv 文件读入数据帧。然后我会根据学生证加入两者。结果是一个数据框 w ith 列作为 student_id、mark、name 和 surname。任何缺失值都将为 NaN(调用连接的数据帧对于处理缺失值很重要)。然后通过标记单元格中的值过滤连接的数据框。

    import pandas as pd
    
    df1 = pd.read_csv('one.csv') # student_id, mark
    df2 = pd.read_csv('two.csv') # student_id, name, surname
    
    df1 = df1.join(df2.set_index('student_id'), on='student_id')
    
    df1 = df1.loc[(df1['mark'] == 'five') | (df1['mark'] == 'four')]
    

    【讨论】:

    • 我的猜测是,如果您得到重复的结果,某些 csv 文件可能在 student_id 的值之前或之后有一个空格,因此在加入时它被注册为两个不同的键。您可以在调用 join 之前调用 df1['student_id'] = df1['student_id'].str.strip() 和 df2 相同的方法,以去除所有前导或尾随空格。
    【解决方案2】:

    您可以将两个 csv 作为数据框读取并加入它们。

    import pandas as pd
    df_1 = pd.read_csv("csv_1")
    df_2 = pd.read_csv("csv_2")
    df_1 = df_1.join(df_2)
    df_1.to_csv("new_csv")
    

    结果将是一个带有附加列的 csv 文件。如果 csv_1 的第 1 行和 csv_2 的第 1 行指的是同一事物(人、对象、ad_id...),那么它可以毫无问题地使用。

    编辑: 如果两个 cvs 都按 student_id 索引行,那么最简单的方法是在加载数据帧时包含 taht:

    import pandas as pd
    df_1 = pd.read_csv("csv_1", index_col = "student_id")
    df_2 = pd.read_csv("csv_2", index_col = "student_id")
    df_1 = df_1.join(df_2)
    df_1.to_csv("new_csv")
    

    【讨论】:

    • columns overlap but no suffix specified: Index(['studentId'], dtype='object')
    • 当列具有相同名称时会发生这种情况......如果两者包含相同的信息,您可以使用 df.drop('studentId')。
    • 另一种选择是使用pd.concat([df1, df2], axis=1),它不会对两个数据帧进行太多花哨的连接,当您只想将两个数据帧粘贴在一起时它会很方便(即它们没有' t 共享任何列或数据)。将轴值更改为 0 或 1 来控制天气 pandas 将两个数据帧彼此相邻或彼此叠加。
    猜你喜欢
    • 2015-11-23
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2017-07-25
    • 2011-02-16
    相关资源
    最近更新 更多