是否有可能保持Pandas中每个CSV列的跟踪记录?

2024-06-29 01:13:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Pandas加载CSV,然后执行一些操作、数据操作等。一切都开始得非常简单:

import pandas as pd
df = pd.read_csv("file.csv", header=7)

在所有操作之后,数据将被导出到CSV、JSON或类似的文件中,以便导入数据库。有一个原始CSV行号和行内容的记录会很有用,这样我们就可以回溯以后发现的任何问题。有可能吗?应该怎么做?你知道吗

例如,我从:

name, height
Arnold Schwarzenegger, 188
Danny De Vito, 147

我将数据处理为:

[{"first_name": "Arnold", "last_name": "Schwarzenegger", "height": 1.88},
 {"first_name": "Danny De", "last_name": "Vito", "height": 1.47}]

然后导入数据库(在生产环境中运行的PostgreSQL)。后来我们发现丹尼·德维托的名字被篡改了,是处理过程还是原始数据?所以,我想把数据导出到:

[{"first_name": "Arnold", "last_name": "Schwarzenegger", "height": 1.88,
  "csv_line_number": 1, "csv_line": "Arnold Schwarzenegger, 188"},
 {"first_name": "Danny De", "last_name": "Vito", "height": 1.47,
  "csv_line_number": 2, "csv_line": "Danny De Vito, 147"}]

因此,只要检查数据库,我们就可以开始了解发生了什么。你知道吗


Tags: csv数据name数据库linedefirstpd
1条回答
网友
1楼 · 发布于 2024-06-29 01:13:13

到目前为止,“事后回溯”最安全、最简单的方法就是简单地重复:

df = pd.read_csv("file.csv")

…然后用它来做你想做的任何验证。你知道吗

在要复制数据帧的场景中,最好使用:

df_copy = df.copy(deep=True) 

…这样你就可以确保得到一份完整的副本。此副本还可以避免由于更改helper函数内的数据帧或其他类似情况而导致的破坏。你知道吗

如果您的数据集非常大,并且复制不是一个好主意,并且出于某种原因只是重复读取原始csv(这将是最安全的),那么需要更多关于您要执行的验证类型的信息。例如,只要存储从df.describe()得到的信息,就可以为以后的验证提供一个相对良好的基础。但这同样取决于这个系统的重要性。你知道吗

如果这个案例只是解决“如何把原来的行号和一个CSV文件的整行已经打开了pd.read\U csv文件()作为“数据帧”中的新列,您可以通过以下方式完成:

df = pd.read_csv('some_data.csv')
df['original'] = df.astype(str).apply(lambda x: ','.join(x), axis=1)
df['row_id'] = range(len(df))

您的数据帧现在有两个新列:

  • 行id从0开始的列
  • 包含逗号分隔的原始记录的列(行)

请注意,我不会使用df.reset_index()作为生成行号索引的方法,因为这是一种糟糕的做法,在其他情况下会导致问题。你知道吗

相关问题 更多 >