对于Series对象(让我们称之为s),pandas提供了三种类型的寻址.
s.iloc [] - 用于整数位置寻址;
s.loc [] - 用于索引标签寻址; 和
s.ix [] - 用于整数位置和标签寻址的混合.
pandas对象还直接执行ix寻址.
# play data ...
import string
idx = [i for i in string.uppercase] # A, B, C .. Z
t = pd.Series(range(26), index=idx) # 0, 1, 2 .. 25
# examples ...
t[0]              # --> 0
t['A']            # --> 0
t[['A','M']]      # --> [0, 12]
t['A':'D']        # --> [0, 1, 2, 3]
t.iloc[25]        # --> 25
t.loc['Z']        # --> 25
t.loc[['A','Z']]  # --> [0, 25] …Run Code Online (Sandbox Code Playgroud) 我想制作一组元组,其中元组的顺序无关紧要.例如 - 如果我要添加的元组是:
[(1,2),(1,3),(2,1)]
Run Code Online (Sandbox Code Playgroud)
它应该像这样输出:
{(1,2),(1,3)}
Run Code Online (Sandbox Code Playgroud)
有没有有效的方法在python中这样做?
我需要将日期转换为Excel序列号,以用于我正在编写的数据修改脚本.通过在我的OpenOffice Calc工作簿中播放日期,我能够推断出'1-Jan 1899 00:00:00'映射到数字零.
我编写了以下函数来将python datetime对象转换为Excel序列号:
def excel_date(date1):
    temp=dt.datetime.strptime('18990101', '%Y%m%d')
    delta=date1-temp
    total_seconds = delta.days * 86400 + delta.seconds
    return total_seconds
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试一些示例日期时,数字与我在Excel中格式化日期时所获得的数字不同(以及OpenOffice Calc).例如,测试'2009-03-20'在Python中给出3478032000,而excel将序列号呈现为39892.
上面的公式出了什么问题?
*注意:我使用的是Python 2.6.3,因此无法访问datetime.total_seconds()
为什么不df.index.map(dict)喜欢的工作df['column_name'].map(dict)?
这是尝试使用index.map的一个小例子:
import pandas as pd
df = pd.DataFrame({'one': {'A': 10, 'B': 20, 'C': 30, 'D': 40, 'E': 50}})
map_dict = {'A': 'every', 'B': 'good', 'C': 'boy', 'D': 'does', 'E': 'fine'}
df
'''
    one
A   10
B   20
C   30
D   40
E   50
'''
df['two'] = df.index.map(mapper=map_dict)
Run Code Online (Sandbox Code Playgroud)
这引起了提升 TypeError: 'dict' object is not callable
喂它一个lambda工作:
df['two'] = df.index.map(mapper=(lambda x: map_dict[x])); df
'''
   one    two
A   10  every
B   20   good
C   30    boy
D   40 …Run Code Online (Sandbox Code Playgroud) 假设我有一个清单.
temp = ['A', 'B', 'A', 'B', 'A', 'B']
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来加入里面的字符串计数.
预期产出:
['A_1', 'B_1', 'A_2', 'B_2', 'A_3', 'B_3']
Run Code Online (Sandbox Code Playgroud)
我能够通过使用列表解析来解决它,但我正在寻找一种方法,我不必指定列表[1, 1, 2, 2, 3, 3].可能吗?
[j + "_" + str(i) for i, j in zip([1, 1, 2, 2, 3, 3], temp)]
Run Code Online (Sandbox Code Playgroud) 我没有Python经验,我经常编写(简化)代码如下:
accumulationList = []
for x in originalList:
    y = doSomething(x)
    accumulationList.append(y)
return accumulationList
Run Code Online (Sandbox Code Playgroud)
然后在我的测试通过后,我重构了
return [doSomething(x) for x in originalList]
Run Code Online (Sandbox Code Playgroud)
但是假设结果有点不同,我的循环看起来像这样:
accumulationList = []
for x in originalList:
    y = doSomething(x)
    accumulationList.extend(y)
return accumulationList
Run Code Online (Sandbox Code Playgroud)
在doSomething列表返回一个列表.什么是最恐怖的方式来实现这一目标?显然,之前的列表理解会给出一个列表列表.
我的数据集中有两列,col1和col2.我希望按照col1对数据进行分组,然后根据每个组的大小对数据进行排序.也就是说,我想以其大小的升序显示组.
我编写了用于分组和显示数据的代码,如下所示:
grouped_data = df.groupby('col1')
"""code for sorting comes here"""
for name,group in grouped_data:
          print (name)
          print (group)
Run Code Online (Sandbox Code Playgroud)
在显示数据之前,我需要按照组大小对其进行排序,这是我无法做到的.
我有一个如下列表.
[['Andrew', '1', '9'], ['Peter', '1', '10'], ['Andrew', '1', '8'], ['Peter', '1', '11'], ['Sam', '4', '9'], ['Andrew', '2', '2']]
Run Code Online (Sandbox Code Playgroud)
我想总结由其他列分组的最后一列.结果是这样的
[['Andrew', '1', '17'], ['Peter', '1', '21'], ['Sam', '4', '9'], ['Andrew', '2', '2']]
Run Code Online (Sandbox Code Playgroud)
这仍然是一个清单.
在实际操作中,我总是想总结由许多其他列分组的最后一列.有没有办法在Python中做到这一点?非常感激.
所以假设我在pandas中有一个DataFrame,其中包含am行和n列.我们还要说我想颠倒列的顺序,可以使用以下代码完成:
df_reversed = df[df.columns[::-1]]
Run Code Online (Sandbox Code Playgroud)
这项行动的大O复杂性是什么?我假设这将取决于列数,但它还取决于行数?
我想迭代两个列表.第一个列表包含一些浏览器用户代理,第二个列表包含这些浏览器的版本.我想只过滤那些版本大于60的用户代理.
这是我的列表理解的样子:
[link for ver in version for link in useragents if ver > 60]
Run Code Online (Sandbox Code Playgroud)
此列表的问题是它多次打印相同的用户代理.我使用zip函数编写了以下函数,它工作正常:
for link, ver in zip(useragents, version):
    if ver > 60:
        # append to list
        print(link)
Run Code Online (Sandbox Code Playgroud)
为什么我的列表理解会返回意外结果?