在使用和研究pandas模块时,我遇到了通过pandas在单个列中计算不同值的解决方案,我使用了以下代码
#!/bin/python3
import csv
import pandas as pd
## Display Settings
pd.set_option('display.height', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('expand_frame_repr', True)
## Code extraction
data = pd.read_csv('/home/karn/plura/Test/Python_Pnada/Cyber_July.csv', usecols=['Platform ID', 'Safe', 'Target system address', 'Failure reason'])
hostData = data[data['Platform ID'].str.startswith("CS-Unix-")][data['Safe'].str.contains("^CS-.*DEFAULT-UNIX-ROOT$")] [['Platform ID', 'Safe', 'Target system address','Failure reason']]
hostData.reset_index(level=0, drop=True)
safeCount = hostData.Safe.value_counts()
print(safeCount)
为列的不同值输出数据:
Safe
CS-PAR-DEFAULT-UNIX-ROOT 2
CS-MOS-DEFAULT-UNIX-ROOT 1
该代码的整个原始数据示例如下:
Platform ID Safe Target system address Failure reason
1000 CS-Unix-RootAccounts-SSH CS-PAR-DEFAULT-UNIX-ROOT jjudet First login - Unable to connect to machine. Ch...
1003 CS-Unix-RootAccounts-SSH CS-MOS-DEFAULT-UNIX-ROOT tts126 First login - Unable to connect to machine. Ch...
1005 CS-Unix-RootAccounts-SSH CS-PAR-DEFAULT-UNIX-ROOT dccamus First login - Unable to connect to machine. Ch...
注意:上面的代码都可以正常工作,但是,如果我需要从空格分隔的另一列中计算出不同的值,例如失败原因下,我们该如何实现。
在这种情况下如何使以下工作正常进行:
safeCount = hostData."Failure reason".value_counts()
答案 0 :(得分:2)
引用pandas DataFrame列的语法为:
要返回系列:
safeCount = hostData["Failure reason"].value_counts()
要返回一个数据框(即多列):
safeCount = hostData[["Failure reason", "Safe"]]
并将Series方法应用于dataFrame:
safeCount = hostData[["Failure reason", "Safe"]].apply(pd.Series.value_counts)