【发布时间】:2019-09-05 19:27:56
【问题描述】:
我编写了一个函数,它获取文件路径列表,然后将它们连接到一个大数据帧中。我想包含一个参数,该参数采用用户有兴趣查看的列名列表。
如果用户决定过滤列,数据框必须始终包含“类别”列,但我希望默认为它返回所有列。我似乎不太明白如何从数据框中选择性地选择列。
这是我的函数,其中穿插了一些伪代码来解释我在说什么。
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
【问题讨论】:
-
我不明白问题所在。您面临的具体问题是什么?
-
我们看不到
ALL,所以大概您在某些情况下会添加两次'category'? -
category是在幕后添加的一个用户不会真正知道的列,所以我不希望它作为用户的输入。这就是为什么总是需要确保类别存在,但需要处理用户未定义columns_needed的情况(我无法返回空数据框) -
if 'category' not in columns_needed:?如果指定列表为None,则添加ALL。如果不是None但不包括'categories',则在前面加上categories。否则,请使用他们提供的清单。 3 种可能性,您只涵盖 2。对请求的列列表的任何更改都会导致您将category添加到列列表中。但这违背了能够毫无后果地删除其他列的意义 -
顺便说一句。也许您还需要在
concat调用中指定ignore_index=True,以防数据帧具有常规整数索引(很可能它们具有)。否则结果索引中可能有重复的结果。
标签: python pandas python-2.7