我有一個非常大的數據框,我想從每列生成唯一的值。這只是一個例子 - 總共有20列。熊貓:通過遍歷它們來計算每列中的唯一值?
CRASH_DT CRASH_MO_NO CRASH_DAY_NO
1/1/2013 01 01
1/1/2013 01 01
1/5/2013 03 05
我期望的輸出是像這樣:
<variable = "CRASH_DT">
<code>1/1/2013</code>
<count>2</count>
<code>1/5/2013</code>
<count>1</count>
</variable>
<variable = "CRASH_MO_NO">
<code>01</code>
<count>2</count>
<code>03</code>
<count>1</count>
</variable>
<variable = "CRASH_DAY_NO">
<code>01</code>
<count>2</count>
<code>05</code>
<count>1</count>
</variable>
我一直在嘗試使用的.sum()或.unique()函數,其他manyquestions所建議的這個topic我已經看過了。
他們似乎都不適用於這個問題,他們都說爲了從每列生成唯一值,您應該使用groupby函數或選擇單個列。我有大量的列(超過20),所以它沒有任何意義,只需寫出df.unique ['col1','col2'...'col20']
我已經嘗試過.unique(),.value_counts()和.count,但我無法弄清楚如何將這些應用於多列,而不是groupby函數或上面提到的任何東西鏈接。
我的問題是:如何從真正的海量數據框中的每個列中生成唯一值的計數,最好是通過循環遍歷列本身? (我很抱歉,如果這是重複的,我已經瀏覽了很多有關此主題的問題,雖然他們似乎也應該爲我的問題工作,但我無法弄清楚如何調整它們以使它們工作對我來說)
這是我到目前爲止的代碼:
import pyodbc
import pandas.io.sql
conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\Users\\<filename>.accdb')
sql_crash = "SELECT * FROM CRASH"
df_crash = pandas.io.sql.read_sql(sql_crash, conn)
df_c_head = df_crash.head()
df_c_desc = df_c_head.describe()
for k in df_c_desc:
df_c_unique = df_c_desc[k].unique()
print(df_c_unique.value_counts()) #Generates the error "numpy.ndarray object has no attribute .value_counts()
不'df_crash.apply(PD。 Series.value_counts)'工作? – EdChum
我想它會,但我不知道從哪裏開始。如果我理解正確,pd.Series指向每一列,所以我認爲我需要以某種方式遍歷每列。那是對的嗎? – ale19
我已經發布了一個答案來說明在你的情況下這種用法。 – Romain