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

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

寫入 CSV 時操縱 Pandas 輸出

寫入 CSV 時操縱 Pandas 輸出

溫溫醬 2023-06-20 17:26:44
我正在嘗試編寫將執行以下操作的內容:讀取超過 1m 行和 100 列數據的 CSV;通過從最大數到最小數列出重復行的出現來總結每一列到目前為止我所擁有的:import pandas as pddf = pd.read_csv (r'infile.csv')outfile = ('outfile.csv')for i in df:    df.pivot_table(index=i, aggfunc='size').to_csv(outfile, mode='a')此代碼輸出如下:ColumnA,0asdf,30qwer,10xyz,3ColumnB,0zxcv,50jkl,8我希望輸出像這樣在 excel 中打開:ColumnA    ColumnBasdf 30    zxcv 50qwer 10    jkl  8xyz  3或者至少有這樣的 CSV:ColumnAasdf,30qwer,10xyz,3ColumnBzxcv,50jkl,8我曾嘗試在 for 循環中的每次迭代后寫一個空行,但無論出于何種原因,空行總是全部添加到文件末尾 - 我認為這與 Pandas 將數據幀推送到 CSV 的方式有關?我不知道。CSV 不使用相同的列標題,也不使用相同的行值,列或行的數量也不可靠地相同,因此它必須能夠根據 CSV 包含的內容創建這些列表,而無需用戶輸入。如果可能的話,我不反對在一次輸出所有數據之前將每個數據子集添加到更大的數據幀中。我是 Pandas 的新手,只是 Python 的初學者,所以我不知道什么是完成這項工作的最佳方法。感謝您的幫助!
查看完整描述

2 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

這是一種讓您非常接近所需 CSV 輸出的方法:


# create sample data

from io import StringIO

import pandas as pd


data = '''col_a, col_b, col_c

10, 20, 30

10, 21, 31

10, 21, 33

11, 22, 33

'''

df = pd.read_csv(StringIO(data), sep=', ', engine='python')

print(df)


   col_a  col_b  col_c

0     10     20     30

1     10     21     31

2     10     21     33

3     11     22     33

其次,用于unstack()重新塑造數據框(即,列標簽變為行標簽)。level=0并通過(原始列標簽)計算值的數量:


df = df.unstack().groupby(level=0).value_counts()


col_a  10    3

       11    1

col_b  21    2

       20    1

       22    1

col_c  33    2

       30    1

       31    1

dtype: int64

最后,重置索引(行標簽),使列標簽有意義,然后排序:


df = (df.reset_index()

 .rename(columns={'level_0': 'orig_col', 'level_1': 'orig_value', 0: 'num_occur'})

 .sort_values('orig_value')

 .sort_values('num_occur', ascending=False)

 .sort_values('orig_col')

)

print(df)


  orig_col  orig_value  num_occur

0    col_a          10          3

1    col_a          11          1

2    col_b          21          2

3    col_b          20          1

4    col_b          22          1

5    col_c          33          2

6    col_c          30          1

7    col_c          31          1

您可以將最新版本的數據框寫入 Excel。


查看完整回答
反對 回復 2023-06-20
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

我假設一列中的值是單一類型,并且您可以在一列中包含字符串,在第二列中包含整數,等等。(如果這不正確,您可以將所有內容都轉換為字符串并使用第一個響應).


# create test data -- different type for each column

from io import StringIO

import pandas as pd


data2 = '''col_a, col_b, col_c

10, 'x', '2019-12-29'

10, 'y', '2019-12-29'

10, 'z', '2019-12-30'

11, 'z', '2019-12-31'

'''

df2 = pd.read_csv(StringIO(data2), sep=', ', engine='python', parse_dates=['col_c'])

現在在每一列上使用value_counts(),并連接成一個寬表:


results = list()


for col in df2.columns:

    s = (df2[col]

         .value_counts()

         .reset_index()

         .rename(columns = {'index': 'value', col: 'count'}))

    s.columns = pd.MultiIndex.from_product([[col], s.columns])

    results.append(s)

    

results = pd.concat(results, axis=1)

print(results)


  col_a       col_b            col_c      

  value count value count      value count

0  10.0   3.0   'z'     2 2019-12-29     2

1  11.0   1.0   'y'     1 2019-12-31     1

2   NaN   NaN   'x'     1 2019-12-30     1


查看完整回答
反對 回復 2023-06-20
  • 2 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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