为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

FFIVE 2022-10-06 16:05:55
我的代码合并 csv 文件并使用 pandas 删除重复项。是否可以向单个合并文件添加带有值的附加标头?应调用附加标头Host Alias并应对应于Host Name例如Host Name是dpc01n1和对应的Host Alias应该dev_dom1 Host Name是dpc02n1和对应的Host Alias应该是dev_dom2 等。这是我的代码from glob import globimport pandas as pdclass 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 comprehensioncontent = [pd.read_csv(f,usecols = final_headers, sep='[;]',engine='python')            for f in stock_files]print(bcolors.OKBLUE + 'Reading files')#combine files into one dataframecombo = pd.concat(content,ignore_index = True)print(bcolors.OKBLUE + 'Combining files')#drop duplicatescombo = 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)
查看完整描述

2 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

def func(row):

    if row['Host Name'] == "dpc01n1":

        return 'dev_dom1'

    #do your Host Alias generate logic here,and return


combo["Host Alias"]=combo.apply(func, axis=1)

DataFrame.apply 接受一个函数来生成一个新的 Series 或 DataFrame


https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html


查看完整回答
反对 回复 2022-10-06
?
jeck猫

TA贡献1909条经验 获得超7个赞

像这样的东西应该工作:


import pandas as pd


combo = 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_num


print(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 文件。



查看完整回答
反对 回复 2022-10-06
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信