ano*_*428 237 python dataframe pandas
我有一个如下的Python字典:
{u'2012-06-08': 388,
u'2012-06-09': 388,
u'2012-06-10': 388,
u'2012-06-11': 389,
u'2012-06-12': 389,
u'2012-06-13': 389,
u'2012-06-14': 389,
u'2012-06-15': 389,
u'2012-06-16': 389,
u'2012-06-17': 389,
u'2012-06-18': 390,
u'2012-06-19': 390,
u'2012-06-20': 390,
u'2012-06-21': 390,
u'2012-06-22': 390,
u'2012-06-23': 390,
u'2012-06-24': 390,
u'2012-06-25': 391,
u'2012-06-26': 391,
u'2012-06-27': 391,
u'2012-06-28': 391,
u'2012-06-29': 391,
u'2012-06-30': 391,
u'2012-07-01': 391,
u'2012-07-02': 392,
u'2012-07-03': 392,
u'2012-07-04': 392,
u'2012-07-05': 392,
u'2012-07-06': 392}
Run Code Online (Sandbox Code Playgroud)
键是Unicode日期,值是整数.我想通过将日期及其对应的值作为两个单独的列将其转换为pandas数据帧.示例:col1:日期col2:DateValue(日期仍为Unicode,日期值仍为整数)
Date DateValue
0 2012-07-01 391
1 2012-07-02 392
2 2012-07-03 392
. 2012-07-04 392
. ... ...
. ... ...
Run Code Online (Sandbox Code Playgroud)
在这方面的任何帮助将不胜感激.我无法在大熊猫文档上找到资源来帮助我解决这个问题.
我知道一个解决方案可能是将此dict中的每个键值对转换为dict,以便整个结构成为dicts的dict,然后我们可以将每一行单独添加到数据帧.但我想知道是否有更简单的方法和更直接的方法来做到这一点.
到目前为止,我已经尝试将dict转换为一个系列对象,但这似乎并没有维持列之间的关系:
s = Series(my_dict,index=my_dict.keys())
Run Code Online (Sandbox Code Playgroud)
And*_*den 371
这里的错误是自从使用标量值调用DataFrame构造函数(其中它期望值为list/dict/...即具有多列):
pd.DataFrame(d)
ValueError: If using all scalar values, you must must pass an index
Run Code Online (Sandbox Code Playgroud)
您可以从字典中获取项目(即键值对):
In [11]: pd.DataFrame(list(d.items())) # or list(d.items()) in python 3
Out[11]:
0 1
0 2012-07-02 392
1 2012-07-06 392
2 2012-06-29 391
3 2012-06-28 391
...
In [12]: pd.DataFrame(list(d.items()), columns=['Date', 'DateValue'])
Out[12]:
Date DateValue
0 2012-07-02 392
1 2012-07-06 392
2 2012-06-29 391
Run Code Online (Sandbox Code Playgroud)
但我认为传递Series构造函数更有意义:
In [21]: s = pd.Series(d, name='DateValue')
Out[21]:
2012-06-08 388
2012-06-09 388
2012-06-10 388
In [22]: s.index.name = 'Date'
In [23]: s.reset_index()
Out[23]:
Date DateValue
0 2012-06-08 388
1 2012-06-09 388
2 2012-06-10 388
Run Code Online (Sandbox Code Playgroud)
che*_*dog 106
将字典转换为pandas数据帧时,您希望键是所述数据帧的列,而值是行值,您可以简单地在字典周围放置括号,如下所示:
new_dict = {'key 1': 'value 1', 'key 2': 'value 2', 'key 3': 'value 3'}
In[33]:pd.DataFrame([new_dict])
Out[33]:
key 1 key 2 key 3
0 value 1 value 2 value 3
Run Code Online (Sandbox Code Playgroud)
这让我有些头疼,所以我希望它可以帮助那里的人!
ntg*_*ntg 83
正如在pandas.DataFrame()
这里直接使用的另一个答案所解释的那样,你不会按照你的想
你可以做的是使用pandas.DataFrame.from_dict
具有orient='index'
:
In[7]: pandas.DataFrame.from_dict({u'2012-06-08': 388,
u'2012-06-09': 388,
u'2012-06-10': 388,
u'2012-06-11': 389,
u'2012-06-12': 389,
.....
u'2012-07-05': 392,
u'2012-07-06': 392}, orient='index', columns=['foo'])
Out[7]:
foo
2012-06-08 388
2012-06-09 388
2012-06-10 388
2012-06-11 389
2012-06-12 389
........
2012-07-05 392
2012-07-06 392
Run Code Online (Sandbox Code Playgroud)
Vik*_*kez 65
将字典的项目传递给DataFrame构造函数,并给出列名称.之后解析Date
列以获取Timestamp
值.
注意python 2.x和3.x之间的区别:
在python 2.x中:
df = pd.DataFrame(data.items(), columns=['Date', 'DateValue'])
df['Date'] = pd.to_datetime(df['Date'])
Run Code Online (Sandbox Code Playgroud)
在Python 3.x中:(需要额外的'列表')
df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
df['Date'] = pd.to_datetime(df['Date'])
Run Code Online (Sandbox Code Playgroud)
小智 12
重点是如何将每个元素放入 a 中DataFrame
。
按行:
pd.DataFrame(dic.items(), columns=['Date', 'Value'])
Run Code Online (Sandbox Code Playgroud)
或按列:
pd.DataFrame([dic])
Run Code Online (Sandbox Code Playgroud)
Jen*_*man 11
我发现的最简单的方法是创建一个空数据框并附加字典。你需要告诉 panda's 不要关心索引,否则你会得到错误:TypeError: Can only append a dict if ignore_index=True
import pandas as pd
mydict = {'foo': 'bar'}
df = pd.DataFrame()
df = df.append(mydict, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
Cs2*_*s20 10
这对我来说是这样的:
df= pd.DataFrame([d.keys(), d.values()]).T
df.columns= ['keys', 'values'] # call them whatever you like
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助
Pandas具有将dict转换为数据帧的内置功能.
pd.DataFrame.from_dict(dictionaryObject,东方= '索引')
对于您的数据,您可以将其转换如下:
import pandas as pd
your_dict={u'2012-06-08': 388,
u'2012-06-09': 388,
u'2012-06-10': 388,
u'2012-06-11': 389,
u'2012-06-12': 389,
u'2012-06-13': 389,
u'2012-06-14': 389,
u'2012-06-15': 389,
u'2012-06-16': 389,
u'2012-06-17': 389,
u'2012-06-18': 390,
u'2012-06-19': 390,
u'2012-06-20': 390,
u'2012-06-21': 390,
u'2012-06-22': 390,
u'2012-06-23': 390,
u'2012-06-24': 390,
u'2012-06-25': 391,
u'2012-06-26': 391,
u'2012-06-27': 391,
u'2012-06-28': 391,
u'2012-06-29': 391,
u'2012-06-30': 391,
u'2012-07-01': 391,
u'2012-07-02': 392,
u'2012-07-03': 392,
u'2012-07-04': 392,
u'2012-07-05': 392,
u'2012-07-06': 392}
your_df_from_dict=pd.DataFrame.from_dict(your_dict,orient='index')
print(your_df_from_dict)
Run Code Online (Sandbox Code Playgroud)
这对我有用,因为我想有一个单独的索引列
df = pd.DataFrame.from_dict(some_dict, orient="index").reset_index()
df.columns = ['A', 'B']
Run Code Online (Sandbox Code Playgroud)
接受字典作为参数并返回一个数据帧,其中字典的键作为索引,值作为列。
def dict_to_df(d):
df=pd.DataFrame(d.items())
df.set_index(0, inplace=True)
return df
Run Code Online (Sandbox Code Playgroud)
pd.DataFrame({'date' : dict_dates.keys() , 'date_value' : dict_dates.values() })
Run Code Online (Sandbox Code Playgroud)
您也可以将字典的键和值传递给新的数据框,如下所示:
import pandas as pd
myDict = {<the_dict_from_your_example>]
df = pd.DataFrame()
df['Date'] = myDict.keys()
df['DateValue'] = myDict.values()
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我希望dict的键和值是DataFrame的列和值.所以唯一对我有用的是:
data = {'adjust_power': 'y', 'af_policy_r_submix_prio_adjust': '[null]', 'af_rf_info': '[null]', 'bat_ac': '3500', 'bat_capacity': '75'}
columns = list(data.keys())
values = list(data.values())
arr_len = len(values)
pd.DataFrame(np.array(values, dtype=object).reshape(1, arr_len), columns=columns)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
503280 次 |
最近记录: |