我将Excel文件中的大型数据集引入python pandas数据帧。目前我正在按名称引用每一列,但由于我有30个左右的列,这是非常低效的。请参阅以下示例代码:
df=pd.read_excel(Filename, converters={'Business date':str, 'Member Name':str, 'Account':str, 'Currency': str, 'Amount':float})
是否可以将0到4列作为字符串引用,然后将5作为float等引用到30?
提前致谢! 詹姆斯
答案 0 :(得分:1)
请注意df.read_excel
会尝试智能地猜测每个的dtype
柱。它根据前几行中的值猜测。你只需要
如果converters
无法正确猜测dtypes,请使用df.read_excel
参数。
converters
参数可以接受一个字典,其键是列名或序数索引号。每the docs:
converters : dict, default None
Dict of functions for converting values in certain columns. Keys can
either be integers or column labels, values are functions that take one
input argument, the Excel cell content, and return the transformed
content.
要构建所需的dict而不必键入所有31个条目,您可以使用dict理解:
In [146]: dict((i,str) if i < 5 else (i,float) for i in range(31))
Out[149]:
{0: str,
1: str,
2: str,
3: str,
4: str,
5: float,
...
30: float}
因此你可以使用:
converters = dict((i,str) if i < 5 else (i,float) for i in range(31))
df = pd.read_excel(filename, converters=converters)
对列中的每个值调用一次converter
函数。这样可以
是很多函数调用,对性能不利。
因此,更快的替代方法是将整个数据框作为字符串读入,然后使用astype
将某些列转换为浮点数:
df = pd.read_excel(filename, dtype=str)
df.iloc[:, 5:] = df.iloc[:, 5:].astype(float)