Python 对多个文件执行操作并合并

Python 对多个文件执行操作并合并,python,pandas,Python,Pandas,我需要在多个文件上执行df操作 df1 = pd.read_csv("~/pathtofile/sample1.csv") some_df=pd.read_csv("~/pathtofile/metainfo.csv") df1.sort_values('col2') df1 = df1[df1.col5 != 'N'] df1['new_col'] = df1['col3'] - df1['col2'] + 1 f = lambda row: '{col1}:{col2}-{col3}({co

我需要在多个文件上执行df操作

df1 = pd.read_csv("~/pathtofile/sample1.csv")
some_df=pd.read_csv("~/pathtofile/metainfo.csv")
df1.sort_values('col2')
df1 = df1[df1.col5 != 'N']
df1['new_col'] = df1['col3'] - df1['col2'] + 1
f = lambda row: '{col1}:{col2}-{col3}({col4})'.format(**row)
df1.astype(str).apply(f,1)
df4 = df1.assign(Unique=df1.astype(str).apply(f,1))
# print(df4)
##merge columns 
df44 = df4.merge(some_df, left_on='genes', right_on='name', suffixes=('','_1'))
df44 = df44.rename(columns={'id':'id_new'}).drop(['name_1'], axis=1)
# print(df44)
df44['some_col'] = df44['some_col'] + ':E' + 
df44.groupby('some_col').cumcount().add(1).astype(str).str.zfill(3)
print(df44)
##drop unwanted columns adapted from http://stackoverflow.com/questions/13411544/delete-column-from-pandas-dataframe
df4 = df44
df4.drop(df4.columns[[3,7,9,11,12,13]], axis=1, inplace=True)

df4 = df4[['col0', 'col1', 'col2', 'col4', 'col5', 'col6', 'col8']]
df4
df4.to_csv('foo.csv', index=False)
以上代码只针对一个文件,没有几个问题 1) 我有15个文件,我需要执行这组命令,我如何在所有15个文件上使用它 2) 并写入15个不同的csv 3) 合并所有15个df中的某些列并生成一个矩阵(例如,仅合并3个df)


有没有比复制粘贴15次更好的方法呢?

好吧,我只是很快地将上述代码组合起来。我建议学习如何编写脚本和概括事物。我没有清理代码,也没有裁员,我会让你决定。如果您发布的代码正常工作,则可以从命令行执行此操作

import sys
import pandas as pd

def load_df(input_file):
    df = pd.DataFrame(pd.read_csv(input_file))
    return df

def perform_operations(df):
    df.sort_values('col2')
    df = df[df.col5 != 'N']
    df['new_col'] = df['col3'] - df['col2'] + 1
    f = lambda row: '{col1}:{col2}-{col3}({col4})'.format(**row)
    df.astype(str).apply(f,1)
    df4 = df.assign(Unique=df.astype(str).apply(f,1))
    return df4

def merge_stuff(df, df1):
    df44 = df.merge(df1, left_on='genes', right_on='name', suffixes=('','_1'))
    df44 = df44.rename(columns={'id':'id_new'}).drop(['name_1'], axis=1)
    return df44


def group_and_drop(df):
    df['some_col'] = df['some_col'] + ':E' + 
    df.groupby('some_col').cumcount().add(1).astype(str).str.zfill(3)
    df4 = df
    df4.drop(df4.columns[[3,7,9,11,12,13]], axis=1, inplace=True)
    return df4

def write_out_csv(df):
    df = df[['col0', 'col1', 'col2', 'col4', 'col5', 'col6', 'col8']]
    df.to_csv('foo.csv', index=False)


def main():
    file_1 = sys.argv[1]
    file_2 = sys.argv[2]
    df = load_df(file_1)
    df1 = load_df(file_2)
    df4 = perform_operations(df)
    df44 = merge_stuff(df4, df1)
    grouped = group_and_drop(df44)
    write_out_csv(grouped)

if __name__ == '__main__':
    main() 

是的,制作一个脚本,并将您所做的操作概括为functionshi@dmitrypoloskiy您可以展示一下如何操作的片段吗?您不知道如何编写脚本?非常少,我从stackoverflow搜索中收集的上述代码集,我不确定在使用pandas时如何定义函数,我正在学习如何编写函数,不知道如何实现任务3在同一函数中的任何帮助感谢!感谢您的帮助,我们将在这方面开展工作并学习…很多感谢如果您不知道它是如何工作的,您可以从命令行执行以下操作
python name\u of\u script.py location\u of\u first\u csv location\u of\u second\u csv
import sys
import pandas as pd

def load_df(input_file):
    df = pd.DataFrame(pd.read_csv(input_file))
    return df

def perform_operations(df):
    df.sort_values('col2')
    df = df[df.col5 != 'N']
    df['new_col'] = df['col3'] - df['col2'] + 1
    f = lambda row: '{col1}:{col2}-{col3}({col4})'.format(**row)
    df.astype(str).apply(f,1)
    df4 = df.assign(Unique=df.astype(str).apply(f,1))
    return df4

def merge_stuff(df, df1):
    df44 = df.merge(df1, left_on='genes', right_on='name', suffixes=('','_1'))
    df44 = df44.rename(columns={'id':'id_new'}).drop(['name_1'], axis=1)
    return df44


def group_and_drop(df):
    df['some_col'] = df['some_col'] + ':E' + 
    df.groupby('some_col').cumcount().add(1).astype(str).str.zfill(3)
    df4 = df
    df4.drop(df4.columns[[3,7,9,11,12,13]], axis=1, inplace=True)
    return df4

def write_out_csv(df):
    df = df[['col0', 'col1', 'col2', 'col4', 'col5', 'col6', 'col8']]
    df.to_csv('foo.csv', index=False)


def main():
    file_1 = sys.argv[1]
    file_2 = sys.argv[2]
    df = load_df(file_1)
    df1 = load_df(file_2)
    df4 = perform_operations(df)
    df44 = merge_stuff(df4, df1)
    grouped = group_and_drop(df44)
    write_out_csv(grouped)

if __name__ == '__main__':
    main()