亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在合并的 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 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號