我得到了几(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中做。 我有两个主意。
read file
打开所有文件,并将唯一的行添加到新列表中,并且当read函数再次遇到相同的recordName时,它将与前一个进行检查。如果其余所有值都相同,则它将不写入而直接通过它;否则,记录将写入error.csv
。但是,我担心这些方法可能不是最理想的方法,因此您需要咨询并指导我寻求更好的方法吗?我已经读过有关numpy的文章,但还没有研究过,但是在此任务的背景下值得这样做吗?也许已经为此创建了一个函数,我不知道吗?
有人可以提供更明智(也许更简单)的解决方案吗?
答案 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"))