2024-10-01 04:45:56 发布
网友
我有一张单子,每个条目都是公司名称
companies = ['AA', 'AAPL', 'BA', ....., 'YHOO']
我想为列表中的每个条目创建一个新的数据框。
有点像
(伪码)
for c in companies: c = pd.DataFrame()
我想办法做这件事,但找不到。有什么想法吗?
为了在@maxymoo的答案下面加下划线,动态地向Python名称空间添加名称几乎总是一个坏主意(code smell)。原因有很多,最突出的是:
创建的名称可能很容易与逻辑已使用的变量冲突。
由于名称是动态创建的,因此通常也会使用动态技术来检索数据。
这就是为什么在语言中包含了听写。正确的方法是:
d = {} for name in companies: d[name] = pd.DataFrame()
现在你可以写一个dict comprehension表达式来做同样的事情,但是有些人觉得它不太可读:
d = {name: pd.DataFrame() for name in companies}
一旦创建了d,公司x的DataFrame就可以作为d[x]检索,这样就可以很容易地查找特定的公司。要对所有公司进行操作,通常会使用如下循环:
d
x
DataFrame
d[x]
for name, df in d.items(): # operate on DataFrame 'df' for company 'name'
在Python 2中,您最好编写
for name, df in d.iteritems():
因为这样可以避免实例化(name, df)元组的列表。
(name, df)
您可以这样做(尽管如果这将是面向公共的代码,请非常小心地使用exec)
exec
for c in companies: exec('{} = pd.DataFrame()'.format(c))
除了以上的答案之外。如果您需要创建空数据帧,但如果您需要基于某些筛选创建多个数据帧,则上述操作将完美无缺:
假设您得到的列表是某个数据帧的一列,并且您希望为每个唯一的公司从较大的数据帧创建多个数据帧:
首先取公司的唯一名称:
compuniquenames = df.company.unique()
创建数据帧字典以存储数据帧
companydict = {elem : pd.DataFrame() for elem in compuniquenames}
以上两项已经在岗位上:
for key in DataFrameDict.keys(): DataFrameDict[key] = df[:][df.company == key]
以上将为所有具有匹配记录的唯一公司提供一个数据框架。
为了在@maxymoo的答案下面加下划线,动态地向Python名称空间添加名称几乎总是一个坏主意(code smell)。原因有很多,最突出的是:
创建的名称可能很容易与逻辑已使用的变量冲突。
由于名称是动态创建的,因此通常也会使用动态技术来检索数据。
这就是为什么在语言中包含了听写。正确的方法是:
现在你可以写一个dict comprehension表达式来做同样的事情,但是有些人觉得它不太可读:
一旦创建了
d
,公司x
的DataFrame
就可以作为d[x]
检索,这样就可以很容易地查找特定的公司。要对所有公司进行操作,通常会使用如下循环:在Python 2中,您最好编写
因为这样可以避免实例化
(name, df)
元组的列表。您可以这样做(尽管如果这将是面向公共的代码,请非常小心地使用
exec
)除了以上的答案之外。如果您需要创建空数据帧,但如果您需要基于某些筛选创建多个数据帧,则上述操作将完美无缺:
假设您得到的列表是某个数据帧的一列,并且您希望为每个唯一的公司从较大的数据帧创建多个数据帧:
首先取公司的唯一名称:
创建数据帧字典以存储数据帧
以上两项已经在岗位上:
以上将为所有具有匹配记录的唯一公司提供一个数据框架。
相关问题 更多 >
编程相关推荐