我有一個包含很多列的 CSV 表(列名是長問題)。我正在為每列中每個問題(“是”和“否”的數量)的 value.counts() 撰寫代碼。我的代碼是:
import pandas as pd
df = pd.read_csv("fixed_site.csv", encoding= 'unicode_escape')
q1 = df['Any shortage of supplies? (Vaccines/Syringes)'].value_counts()
您可以看到列名,即“供應短缺嗎?(疫苗/注射器)”。與此相比,還有許多其他非常長的問題。
我有兩個問題。1.如何避免手動寫長問題。2. 完成 counts() 函式后,我想創建一個 CSV,其中第一列將有“問題”,接下來的兩列將有“是”和“否”的值。像下面
q1_name = "Any shortage of supplies? (Vaccines/Syringes)"
q1_analysis = [q1_name, q1["Yes"], q34["No"]]
fixedsite_analysis = pd.DataFrame(data=[total_visits], columns=["QUESTION","YES", "NO"])
fixedsite_analysis.to_csv("fixedsite_analysis.csv", index = False)
如何用更少的代碼簡單地做到這一點(而不是復制或撰寫每一列的名稱)。謝謝您的幫助
uj5u.com熱心網友回復:
假設以下資料框:
df = pd.DataFrame({'Q1': list('YYYN'), 'Q2': list('NNYY'), 'Q3': list('YNNN')})
print(df)
# Output
Q1 Q2 Q3
0 Y N Y
1 Y N N
2 Y Y N
3 N Y N
使用melt和pivot_table重塑您的資料框:
out = (df.melt(var_name='question', value_name='answer').assign(dummy=1)
.pivot_table('dummy', 'question', 'answer', aggfunc='count')
.rename_axis(columns=None).reset_index())
print(out)
# Output
question N Y
0 Q1 1 3
1 Q2 2 2
2 Q3 3 1
該dummy變數設定為允許pivot_table計數值“是”或“否”。
uj5u.com熱心網友回復:
for column in df.columns:
yes, no = df[column].value_counts()['YES'], df[column].value_counts()['NO']
result = pd.DataFrame({'question': column,
'YES': yes,
'NO': no},
index=[0])
result.to_csv(f'{column}.csv', index=False)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429595.html
標籤:熊猫
