为什么不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) 我想根据查询设置列的值.我可能会用它.where来完成这个,但是标准.query是字符串,我更容易维护,特别是当标准变得复杂时.
import numpy as np
import pandas as pd
np.random.seed(51723)
df = pd.DataFrame(np.random.rand(n, 3), columns=list('abc'))
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列d,并将值设置为1,满足这些条件:
criteria = '(a < b) & (b < c)'
Run Code Online (Sandbox Code Playgroud)
除其他外,我试过:
df['d'] = np.nan
df.query(criteria).loc[:,'d'] = 1
Run Code Online (Sandbox Code Playgroud)
但是,除非SettingWithCopyWarning尽管我正在使用,否则这似乎什么都不做.loc
inplace像这样传递:
df.query(criteria, inplace=True).loc[:,'d'] = 1
Run Code Online (Sandbox Code Playgroud)
给 AttributeError: 'NoneType' object has no attribute 'loc'
我在这里调试这段代码时遇到困难。我似乎无法弄清楚为什么标题和标签不显示。希望这不是一件显而易见的事情。但我已经让它与其他图表一起工作得很好......
import numpy as np
import matplotlib.pyplot as plt
data =[5434, 4948, 4521, 4570, 4990, 5702, 5241, 5112, 5015, 4659, 4806,
4637, 5670, 4381, 4820, 5043, 4886, 4599, 5288, 5299, 4848, 5378,
5260, 5055, 5828, 5218, 4859, 4780, 5027, 5008, 4609, 4772, 5133,
5095, 4618, 4848, 5089, 5518, 5333, 5164, 5342, 5069, 4755, 4925,
5001, 4803, 4951, 5679, 5256, 5207, 5621, 4918, 5138, 4786, 4500,
5461, 5049, 4974, 4592, 4173, 5296, 4965, 5170, 4740, 5173, 4568,
5653, 5078, 4900, 4968, …Run Code Online (Sandbox Code Playgroud) 为 1 秒采样数据设置分钟小刻度:OverflowError: int too big to convert
考虑这个数据帧,采样间隔为 1 秒,持续时间约为 30 分钟:
import matplotlib.pyplot as plt
from matplotlib.dates import MinuteLocator
import pandas as pd
ndex = pd.date_range('2021-08-01 07:07:07', '2021-08-01 07:41:12', freq='1S', name='Time')
df = pd.DataFrame(data=np.random.randint(1, 100, len(ndex)), index=ndex, columns=['A'])
Run Code Online (Sandbox Code Playgroud)
现在我们绘制它:
fig, ax = plt.subplots()
df.plot(color='red', marker='x', lw=0, ms=0.2, ax=ax)
Run Code Online (Sandbox Code Playgroud)
现在我希望每分钟都有轻微的滴答声。
我试过这个:
ax.xaxis.set_minor_locator(MinuteLocator())
Run Code Online (Sandbox Code Playgroud)
但这失败了OverflowError: int too big to convert