如果值匹配,则自动比较两个csv文件的值的过程将第二个csv读入DataFrame

时间:2019-02-26 14:12:40

标签: python pandas csv dataframe

我已将Excel导入数据框。看起来像这样:

enter image description here

然后,我使用代码按照“ tx_id”对这些数据进行分组,并创建单独的csv(名称为tx_id),这样我便得到了这样的数据(3e6737ae-c3af-4d19-a645-d17fc73dbb7c.csv)。这是代码:

for i, g in dframe.groupby('tx_id'):
     g.to_csv('{}.csv'.format(i.split('/')[0]), index=False)

然后我创建了一个仅包含tx_id的单独dframe,然后使用以下代码删除了重复项:

dframe1 = dframe1.drop_duplicates()

现在我的数据框如下所示:

enter image description here

我已将此数据帧转换为csv。现在,我想将csv文件的名称(即tx_id值)与新创建的csv中存在的数据进行比较,如果名称匹配,我想将csv文件(即tx_id值)读入数据框。我以前是手动导入这些csv文件的,但是我有一个很大的数据集,因此每次读取数据并对其进行进一步处理都是不可行的。现在我正在做的是将csv文件分别导入到数据框中。我正在使用此代码:

df = pd.read_csv(' ae229a81-bb33-4cf1-ba2f-360fffb0d94b.csv')

这给了我这样的结果:

enter image description here

然后我曾经使用以下代码来拆开它并应用value_counts:

df1 = df.groupby('rule_id')['request_id'].value_counts().unstack().fillna(0)

最终的结果看起来像这样:

enter image description here

我想使此过程自动化,但我不知道如何做。你们可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以迭代<?php include('***Contains private stuff***.php'); if($_POST) { $to = "***PRIVATE MAIL***"; // Your email here $subject = 'Message from my website'; // Subject message here } //Send mail function function send_mail($to,$subject,$message,$headers){ return @mail($to,$subject,$message,$headers); } //MySQL $query = "INSERT INTO contact (name, email, subject, message) VALUES ('$name', '$email', '$subject', '$message')"; $result = mysqli_query($connection, $query); //Sanitize input data, remove all illegal characters $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); $email = filter_var($_POST['mail'], FILTER_SANITIZE_EMAIL); $subject = filter_var($_POST['subject'], FILTER_SANITIZE_STRING); $message = filter_var($_POST['message'], FILTER_SANITIZE_STRING); //Send Mail $headers = 'From: ' . $email .''. "\r\n". 'Reply-To: '.$email.'' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); $sent = send_mail($to, $subject, $message . "\r\n\n" .'Name: '.$name. "\r\n" .'Email: '.$email, $headers); if (! $sent) { // log the error error_log('Mail Error: Message to ' . $to . ' wasn\'t sent'); } ?> 并将数据帧附加到tx_id

list

这仅在与csv文件位于同一目录中执行时才有效。否则:

import pandas as pd

dfs = []
for tx in dframe1['tx_id']:
    dfs.append(pd.read_csv('%s.csv' % tx))

已编辑

要应用某些功能,而不是直接附加数据框:

import os
import pandas

dfs = []

for tx in dframe1['tx_id']:
    dfs.append(pd.read_csv(os.path.join('/path/to/csv/', '%s.csv' % tx)))

现在您的for tx in dframe1['tx_id']: df = pd.read_csv(os.path.join('/path/to/csv/', '%s.csv' % tx)) dfs.append(df.groupby('rule_id')['request_id'].value_counts().unstack().fillna(0)) 拥有所有dfs的搜索结果。您可以使用索引来引用它们。

如果要使用文件名查找它们,请使用value_counts()

dict