df的列表字典

时间:2016-11-16 07:17:35

标签: python pandas dictionary

我有一个像这样的列表:

    {291840: ['http://www.rollanet.org', 'http://www.rollanet.org'], 
     291841: ['http://www.superpages.com', 'http://www.superpages.com], 
     291848: ['http://www.drscore.com/App/ScoreDr', 'http://www.drscore.com'],...etc }

我想将其转换为两列数据框,一个用于subj_id,另一个用于相应列表。每行都是dict的一个键,列是使用from_dict的值(列表),其中orient设置为index。根据文档:" orient:如果键应该是行,则传递'index'。"

names = ['subj_id', 'URLs']

dfDict = pd.DataFrame(columns = names)
dfDict.from_dict(listDict, orient = 'index')

相反,我得到一个数据框,其中列表的每个元素都作为列。我只想要两列。一个用于subj_ID,另一个用于与subj_ID相关联的网址列表。

2 个答案:

答案 0 :(得分:5)

我认为你需要:

listDict = {291840: ['http://www.rollanet.org', 'http://www.rollanet.org'], 
     291841: ['http://www.superpages.com', 'http://www.superpages.com'], 
     291848: ['http://www.drscore.com/App/ScoreDr', 'http://www.drscore.com']}

names = ['subj_id', 'URLs']

df = pd.DataFrame(listDict).stack().reset_index(drop=True, level=0).reset_index()
df.columns = names
print (df)
   subj_id                                URLs
0   291840             http://www.rollanet.org
1   291841           http://www.superpages.com
2   291848  http://www.drscore.com/App/ScoreDr
3   291840             http://www.rollanet.org
4   291841           http://www.superpages.com
5   291848              http://www.drscore.com

旧答案:

df = pd.DataFrame.from_dict(listDict, orient='index').stack().reset_index(drop=True, level=1)

如果列URLs中的需求列表使用list comprehensions

df = pd.DataFrame({'subj_id': pd.Series([k for k,v in listDict.items()]),
                   'URLs': pd.Series([v for k,v in listDict.items()])}, columns = names)
print (df)
   subj_id                                               URLs
0   291840  [http://www.rollanet.org, http://www.rollanet....
1   291841  [http://www.superpages.com, http://www.superpa...
2   291848  [http://www.drscore.com/App/ScoreDr, http://ww...

答案 1 :(得分:4)

因为我来不及给予jezrael的答案,所以这是一个有趣的方法:

if (aktifmi == "0")
{
    cmd = new SqlCommand("select * from dh  where person_id=" + person_id + ";");
    cmd.CommandType = CommandType.Text;
    cmd.Connection = conn;
    int ds= (int)cmd.ExecuteScalar();
    if (ds!= 0)
    {
        this.RegisterStartupScript("DisplayError","<script language=javascript>alert('ERROR');</script>");
    } 
}

enter image description here