猿问

在合并的 csv 文件中添加附加列

我的代码合并 csv 文件并使用 pandas 删除重复项。是否可以向单个合并文件添加带有值的附加标头?


应调用附加标头Host Alias并应对应于Host Name


例如Host Name是dpc01n1和对应的Host Alias应该dev_dom1 Host Name是dpc02n1和对应的Host Alias应该是dev_dom2 等。


这是我的代码


from glob import glob

import pandas as pd


class bcolors:

    HEADER = '\033[95m'

    OKBLUE = '\033[94m'

    OKGREEN = '\033[92m'

    WARNING = '\033[93m'

    FAIL = '\033[91m'

    ENDC = '\033[0m'

    BOLD = '\033[1m'

    UNDERLINE = '\033[4m'


input_path = r'C:\Users\urale\Desktop\logs'

output_path = r'C:\Users\urale\Desktop\logs' + '\\'

output_name = 'output.csv'


stock_files = sorted(glob(input_path + '\pc_dblatmonstat_*_*.log'))

print(bcolors.OKBLUE + 'Getting .log files from', input_path)


final_headers = [

        'Start Time', 

        'epoch', 

        'Host Name', 

        'Db Alias', 

        'Database', 

        'Db Host', 

        'Db Host IP',

        'IP Port',

        'Latency (us)'

]


#read in files via list comprehension

content = [pd.read_csv(f,usecols = final_headers, sep='[;]',engine='python') 

           for f in stock_files]

print(bcolors.OKBLUE + 'Reading files')



#combine files into one dataframe

combo = pd.concat(content,ignore_index = True)

print(bcolors.OKBLUE + 'Combining files')


#drop duplicates

combo = combo.drop_duplicates()

#combo = combo.drop_duplicates(final_headers, keep=False)

print(bcolors.OKBLUE + 'Dropping duplicates')


#write to csv:

combo.to_csv(output_path + output_name, index = False)

print(bcolors.OKGREEN + 'Merged file output to', output_path, 'as', output_name)


FFIVE
浏览 119回答 2
2回答

交互式爱情

def func(row):    if row['Host Name'] == "dpc01n1":        return 'dev_dom1'    #do your Host Alias generate logic here,and returncombo["Host Alias"]=combo.apply(func, axis=1)DataFrame.apply 接受一个函数来生成一个新的 Series 或 DataFramehttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

jeck猫

像这样的东西应该工作:import pandas as pdcombo = pd.DataFrame({        'Start Time' : [1,2,3],         'epoch' : [1,2,3],         'Host Name': ['dpc01n1','dpc02n1','dpc00103n1'],         'Db Alias' : [1,2,3],         'Database' : [1,2,3],         'Db Host' : [1,2,3],         'Db Host IP' : [1,2,3],        'IP Port' : [1,2,3],        'Latency (us)' : [1,2,3],})h_num = combo['Host Name'].str.lstrip('dpc0').str[:-2]combo['Host Alias'] = 'dev_dom' + h_numprint(combo)它假定所有'Host Name's 不以任何其他开头,'dpc'并且不需要两个尾随字符 like 'n1'。python教程中的示例评论中提出的后续问题:它假定我合并的 csv 文件已经有主机别名,但它不会导致错误:发生异常:ValueError Usecols 与列不匹配,列预期但未找到:['Host Alias'] File "D:\OneDrive \python\merger.py", line 42, in content = [pd.read_csv(f,usecols = combo_headers, sep='[;]',engine='python') 除了 dpc,我还有 tpc。我该如何添加呢?– 树干str.lstrip无论顺序如何,都会删除参数中提供的所有字符。只需添加一个't':h_num = combo['Host Name'].str.lstrip('tdpc0').str[:-2]添加了 t 的 python 导师示例更多阅读 str.strip至于:它假定我合并的 csv 文件已经有主机别名我不确定你的意思。当你这样做combo['Host Alias'] = 'dev_dom' + h_num如果该列尚不存在,'Host Alias'则将在 中创建该列。pandas.DataFrame如果确实存在,则该列将被操作返回的新数据替换。然后,您可以使用pandas.DataFrame.to_csv将此 DataFrame 保存到 .csv 文件。
随时随地看视频慕课网APP

相关分类

Python
我要回答