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

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

可選擇從 Pandas 數據框中選擇列

可選擇從 Pandas 數據框中選擇列

慕容708150 2022-05-19 15:42:43
我編寫了一個函數,它采用文件路徑列表,然后將它們連接到一個大數據幀中。我想包含一個參數,該參數采用用戶有興趣查看的列名列表。如果用戶決定過濾列,數據框必須始終包含“類別”列,但我希望默認為它返回所有列。我似乎不太明白如何從數據框中選擇性地選擇列。這是我的函數,其中穿插了一些偽代碼來解釋我在說什么。def combine_all_data(data_files, columns_needed=ALL):    dataframes = map(pd.read_csv, data_files)    if columns_needed != ALL        columns_needed = ['category'] + columns_needed    df = pd.concat(dataframes, sort=False)[columns_needed]    return df
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

如果ALL你不知道如何實現,你可以試試這個:


def combine_all_data(data_files, columns_needed=None):

    kwargs= dict()

    if columns_needed is not None:

        if 'category' not in columns_needed:

            columns_needed= ['category'] + columns_needed

        kwargs['usecols']= columns_needed

    dataframes = [pd.read_csv(data_file, **kwargs) for data_file in data_files]

    return pd.concat(dataframes, sort=False)

這樣做的好處是,您需要更少的內存,因為您不想看到的列在閱讀過程中已經被跳過了。另外,您返回一個完整的數據框而不是一個切片。因此,您可以不受限制地使用它。


查看完整回答
反對 回復 2022-05-19
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

read_csv有一個usecols論點:


def combine_all_data(data_files, columns_needed='ALL'):

   if needed_columns != 'ALL':

      if not 'category' in columns_needed:

         columns_needed.append('category')

      return pd.concat([pd.read_csv(x, usecols=columns_needed) for x 

      in data_files], sort=False)

   else: 

      return pd.concat([pd.read_csv(x) for x in data_files], sort=False)


查看完整回答
反對 回復 2022-05-19
  • 2 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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