【问题标题】:Adding data to csv using pandas dataframe, by adding new column通过添加新列,使用 pandas 数据框将数据添加到 csv
【发布时间】:2021-07-30 02:57:35
【问题描述】:

我想使用 python 中的pandas 模块将一些来自红移表的数据附加到 csv 文件中。在 python 中,我可以使用psycopg2 模块成功地连接和检索redshift 表中的行。现在,我将日期数据存储在 csv 中。所以我需要首先在 csv 中创建一个新的日期列,然后将检索到的数据附加到该新列中。

我正在使用以下命令从红移表中读取:

conn=psycopg2.connect( host='my_db_hostname', port=`portnumber`, user='username', password='password', dbname='db')
conn.autocommit = True
cur=conn.cursor()
cur.execute(""" select  emp_name, emp_login_count from public.emp_login_detail where login_date=current_date  """)
records=cur.fetchall()
cur.close()

现在,我想将这些 emp_name 和 emp_login_count 列附加到现有的 csv 中。下面是 csv 的快照:



每天我都需要在 csv 中添加新的日期列,然后我需要将 emp_login_count 与相应人的姓名相对应。
我是 Pandas 的新手,不知道如何实现这一点。有人可以帮帮我吗?

【问题讨论】:

  • 我们可以看到records 的样本/示例值吗?您现在拥有emp_login_count 中的登录计数,并且您想将其更改为今天的日期,对吗?
  • CSV 对追加不友好,特别是如果您想追加列。您必须每次都重新阅读、添加该列并将其写回,这会随着时间的推移而变得更加昂贵。我建议您重新考虑如何存储数据。由于更新是按日期进行的,我建议您按日期“分区”数据集,并使用 parquet 之类的东西。如果你想保持简单,你可以自己管理分区,并继续使用CSVs。
  • 你可能想在这里查看这个答案:stackoverflow.com/a/34485965/8523960

标签: python pandas dataframe export-to-csv


【解决方案1】:

添加以下内容并尝试一下:

records=cur.fetchall()

# Create a dataframe of the SQL query's result 
column_names = ['emp_name','login_count']
df = pd.DataFrame(records, columns = column_names)
df.head()

现在为每日登录计数 csv 文件创建另一个数据框

df_daily = pd.read_csv('<INSERT the path_to_csv here>')
df_daily.head()

合并 'emp_name' 列上的两个数据框

result = df.merge(df_daily, on='emp_name')
result.head()

加入后,您可以将'login_count'列重命名为今天的日期

result.rename(columns = {'login_count':'< INSERT date here>'}, inplace = True)

然后您可以再次将新数据保存到 csv 文件中:

pd.to_csv('<INSERT name of file.csv>', index=False)

【讨论】:

  • 非常感谢@Shrawan Sapre。这完全解决了我的问题。我只想问一件事,我正在从 S3 读取文件,需要用新的 csv 替换那里的原始文件,或者将更改保存到原始文件。有什么办法可以做到吗?
  • 我使用python库s3fs用pandas读写csvs。您可以尝试使用最适合您的包 boto3 或 s3fs。这里有一篇文章给出了一个例子:towardsdatascience.com/…
【解决方案2】:

我正在考虑每天你会得到 1 列包含 emp_name 数据,而另一列包含 emp_login_count 数据。

我相信你需要看看:

1 - 使用read_csv in pandas 读取 csv 文件,因为这将为您提供包含历史信息的数据框。

2 - 每天你必须创建一个new dataframe,其中包含数据库中的信息。如果您愿意,您可以使用datetime library and today method 来获取今天的日期并用作列标题。

3 - 使用 merge method in pandas 将 csv 中的信息与新数据合并,您可能需要类似:df_original.merge(df_new_information, left_on='emp_name', right_on='emp_name', how='outer') 的内容。 left_on 和 right_on 是您将用作参考的列名。

4 - 使用to_csv in pandas 编写一个 csv 文件,这将创建一个新的或替换现有的 csv 文件。

抱歉英语不好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2021-07-19
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多