【问题标题】:Find dictionary key match in CSV and write value to the next column在 CSV 中查找字典键匹配并将值写入下一列
【发布时间】:2017-05-02 16:44:25
【问题描述】:

使用 Python 2.7。

我每天早上都运行一个函数,它创建一个带有键和值的输出字典。输出字典结果如下所示:

“约翰”:1
“杰克”:5
“露西”:235
“莎拉”:33

然后我打开一个现有的 csv 文件,其中包含如下所示的列/行:

名称 1/1/17 1/2/17
约翰 5 88
杰克 31 34
莎拉 45 12
露西 77 57

其中A列标题始终为名称,每个连续的列标题为该列中数据的日期。

我正在尝试编写一个函数:

打开 csv, 写入 csv 将日期附加到下一个可用的列标题(即第 1 行) 然后 在 csv 中找到与我的字典中的键匹配的键 将字典中的值附加到 csv 中的下一个打开列

使用我上面的例子,然后
名称 1/1/17 1/2/17
约翰 5 88
杰克 31 34
莎拉 45 12
露西 77 57

变成

名称 1/1/17 1/2/17 1/3/17
约翰 5 88 1
杰克 31 34 5
莎拉 45 12 33
露西 77 57 235

我已经非常接近我想要用以下代码做的事情了:

import pandas as pd
import datetime


starter_df = pd.read_csv('keyword_results.csv', names = ['Keyword'])

#dictionary created by function
test_dic = {"John": 12, "Jake": 45, "Sarah": 31, "Lucy": 18}

now = datetime.datetime.now()

str_date = now.strftime("%m %d %Y")

starter_df[str_date] = starter_df["Keyword"].map(test_dic)

starter_df.to_csv('keyword_results.csv')

我正在将 csv 读入数据帧,尝试将新列映射到数据帧,然后将数据帧输出到 csv。

问题是这会将日期写入新列,但其下方没有数据。

我很茫然,谢谢你的帮助。我还是 Python 新手。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    您可以使用 lambda 来做到这一点,它既简单又快速。读取csv时也无需添加参数为“names = ['Keyword']”。

    import pandas as pd
    import datetime
    import os 
    os.chdir('D:/mypc/')
    
    starter_df = pd.read_csv('keyword_results.csv')
    
    #dictionary created by function
    test_dic = {"John": 12, "Jake": 45, "Sarah": 31, "Lucy": 18}
    
    now = datetime.datetime.now()
    str_date = now.strftime("%m/%d/%Y")
    
    starter_df[str_date] = starter_df["Name"].map(lambda x : test_dic[x])
    
    starter_df.to_csv('keyword_results.csv')
    

    【讨论】:

    • 我尝试使用它,但我收到以下错误:KeyError: 'Name'
    • 'Name' 是您现有 CSV 的列名(A 列),您在该列下提到了姓名(John、Jake、Sarah、Lucy)。
    • 如果你的 csv 的第一列总是一个名字,那么你也可以这样做 starter_df[str_date] = starter_df.ix[:,0].map(lambda x : test_dic[ x])
    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多