预先处理python中的多个数据框

时间:2019-03-28 09:25:53

标签: python pandas csv numpy data-science

我得到了几(15)个数据帧。它们包含基于一张图的值,但它们具有碎片形式。

样本列表看起来像A1 - 3k records, A2 - 6k records. B1 - 12k records, B2- 1k records, B3 - 3k records. C1...等。

所有文件都具有相同的格式,看起来是这样的:

name     sample    position    position_ID
String1   String1      num1        num1
String2   String2      num2        num2
...

所有文件都来自各种生物微阵列。不同的公司具有不同的矩阵,因此文件大小分散。但是它们每个都基于一个通用的整个数据库。仅选择了主数据库中的某些数据。因此,单个记录可以在文件之间重复。我想看看它们是否兼容。

我要在此任务中实现什么?

我想检查所有文件中所有记录在name方面是否具有相同的位置和pos_ID值。 如果任何文件中具有相同名称的测试记录的值不同,则必须将其写入error.csv。 如果到处都一样-result.csv。

说实话,我不知道该如何咬它,因此在这里我受到提示,暗示有人在向我很好地建议。我想在python中做。 我有两个主意。

  1. 将所有文件作为一个数据帧加载到Pandas中,并尝试编写一个按记录过滤整个DF记录的函数(用于if语句循环吗?)。
  2. 通过python read file打开所有文件,并将唯一的行添加到新列表中,并且当read函数再次遇到相同的recordName时,它将与前一个进行检查。如果其余所有值都相同,则它将不写入而直接通过它;否则,记录将写入error.csv

但是,我担心这些方法可能不是最理想的方法,因此您需要咨询并指导我寻求更好的方法吗?我已经读过有关numpy的文章,但还没有研究过,但是在此任务的背景下值得这样做吗?也许已经为此创建了一个函数,我不知道吗?

有人可以提供更明智(也许更简单)的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我想我对你要去的地方有一个大概的了解。这就是我的处理方式

import pandas as pd

df1 = pd.read_csv("file1.csv")
df2 = pd.read_csv("file2.csv")
df1["filename"] ="file1.csv"
df2["filename"] ="file2.csv"

df_total = pd.concat([df1,df2],axis=1) # stacks them vertically

df_total_no_dupes = df_total.drop_duplicates() # drops duplicate rows

# this gives you the cases where id occures more than once
name_counts = df_total_no_dupes.groupby("name").size().reset_index(name='counts')

names_which_appear_more_than_once = name_counts[name_counts["counts"] > 1]["name"].unique()

filter_condition = df_total_no_dupes["name"].isin(names_which_appear_more_than_once)

# this should be your dataframe where there are at least two rows with same name but different values.
print(df_total_no_dupes[filter_condition].sort_values("name"))