Lui*_*era 16 python dataframe pandas
我有一个列表,每个条目都是公司名称
companies = ['AA', 'AAPL', 'BA', ....., 'YHOO']
Run Code Online (Sandbox Code Playgroud)
我想为列表中的每个条目创建一个新的数据帧.
就像是
(伪代码)
for c in companies:
c = pd.DataFrame()
Run Code Online (Sandbox Code Playgroud)
我已经找到了一种方法来做到这一点,但找不到它.有任何想法吗?
hol*_*web 57
为了强调我对@maxymoo的答案的评论,将名称动态添加到Python命名空间几乎总是一个坏主意("代码味道").原因有很多,最突出的是:
创建的名称可能很容易与逻辑已使用的变量冲突.
由于名称是动态创建的,因此通常最终还是使用动态技术来检索数据.
这就是为什么dicts被包含在语言中的原因.正确的方法是:
d = {}
for name in companies:
d[name] = pd.DataFrame()
Run Code Online (Sandbox Code Playgroud)
现在你可以编写一个单独的dict理解表达式来做同样的事情,但有些人发现它不太可读:
d = {name: pd.DataFrame() for name in companies}
Run Code Online (Sandbox Code Playgroud)
一旦d创建DataFrame,公司x就可以被检索d[x],因此您可以非常轻松地查找特定公司.要对所有公司进行操作,您通常会使用如下循环:
for name, df in d.items():
# operate on DataFrame 'df' for company 'name'
Run Code Online (Sandbox Code Playgroud)
在Python 2中,你写得更好
for name, df in d.iteritems():
Run Code Online (Sandbox Code Playgroud)
因为这可以避免实例化(name, df)元组列表.
max*_*moo 10
你可以做到这一点(尽管exec如果这将成为面向公众的代码,显然会非常谨慎地使用)
for c in companies:
exec('{} = pd.DataFrame()'.format(c))
Run Code Online (Sandbox Code Playgroud)
小智 8
下面是循环动态创建数据框的代码:
companies = ['AA', 'AAPL', 'BA', ....., 'YHOO']
for eachCompany in companies:
#Dynamically create Data frames
vars()[eachCompany] = pd.DataFrame()
Run Code Online (Sandbox Code Playgroud)
vars()、locals() 和 globals() 之间的区别请参考以下链接:
globals()、locals() 和 vars() 之间有什么区别?
除了上述出色的答案之外。如果您需要创建空的数据框,但是需要基于一些过滤来创建多个数据框,则上面的方法就可以完美地工作:
假设您得到的列表是某个数据框的一列,并且您想为更大的数据框的每个唯一公司创建多个数据框:-
首先以公司的唯一名称:
compuniquenames = df.company.unique()
Run Code Online (Sandbox Code Playgroud)创建数据框字典以存储数据框
companydict = {elem : pd.DataFrame() for elem in compuniquenames}
Run Code Online (Sandbox Code Playgroud)以上两个已经发布:
for key in DataFrameDict.keys():
DataFrameDict[key] = df[:][df.company == key]
Run Code Online (Sandbox Code Playgroud)
上面将为您提供所有具有匹配记录的独特公司的数据框。
| 归档时间: |
|
| 查看次数: |
48084 次 |
| 最近记录: |