ale*_*e19 2 python dataframe pandas
我有一个非常大的数据帧,我想从每列生成唯一的值.这只是一个样本 - 总共有20多列.
CRASH_DT CRASH_MO_NO CRASH_DAY_NO
1/1/2013 01 01
1/1/2013 01 01
1/5/2013 03 05
Run Code Online (Sandbox Code Playgroud)
我想要的输出是这样的:
<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>
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用.sum()或.unique()函数,正如我已经看过的关于这个主题的许多其他问题所建议的那样.
它们似乎都不适用于这个问题,并且所有人都说为了从每一列生成唯一值,您应该使用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()
Run Code Online (Sandbox Code Playgroud)
我会遍历value_counts().items()每列:
>>> df["CRASH_DAY_NO"].value_counts()
01 2
05 1
dtype: int64
>>> df["CRASH_DAY_NO"].value_counts().items()
<zip object at 0x7fabf49f05c8>
>>> for value, count in df["CRASH_DAY_NO"].value_counts().items():
... print(value, count)
...
01 2
05 1
Run Code Online (Sandbox Code Playgroud)
所以像
def vc_xml(df):
for col in df:
yield '<variable = "{}">'.format(col)
for k,v in df[col].value_counts().items():
yield " <code>{}</code>".format(k)
yield " <count>{}</count>".format(v)
yield '</variable>'
with open("out.xml", "w") as fp:
for line in vc_xml(df):
fp.write(line + "\n")
Run Code Online (Sandbox Code Playgroud)
给我
<variable = "CRASH_DAY_NO">
<code>01</code>
<count>2</count>
<code>05</code>
<count>1</count>
</variable>
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1944 次 |
| 最近记录: |