如果我运行以下代码:
dft1 = pd.DataFrame({'a':[1, np.nan, np.nan]})
dft2 = pd.DataFrame({'a':[1, 1, np.nan]})
dft1.a==dft2.a
Run Code Online (Sandbox Code Playgroud)
结果是
0 True
1 False
2 False
Name: a, dtype: bool
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到结果
0 True
1 False
2 True
Name: a, dtype: bool
Run Code Online (Sandbox Code Playgroud)
即,np.nan == np.nan评估为True.
我认为这是基本的功能,我一定要问一个重复的问题,但我花了很多时间在SO或Google中搜索,但找不到它.
以下代码抛出“ Out of bounds nanosecond timestamp: 1452-04-15 00:00:00
”错误。如果我将日期字符串替换为某些最近的日期(例如 2017-01-01),则相同的代码有效。
df=pd.DataFrame({'Date':np.arange('1452-04-15', '1519-05-02', dtype='datetime64[D]')})
Run Code Online (Sandbox Code Playgroud)
此示例代码用于提供一种简单的方法来重现错误。我真正想做的是将包含这些非常早的日期的 csv 读取到数据框中,并将字符串日期转换为 np.datetime64[D] 或任何类似的日期格式。
假设我有以下两个数据帧:
df1 = pd.DataFrame(np.random.randn(100, 3),columns=['A','B','C']).cumsum()
df2 = pd.DataFrame(np.random.randn(100, 3),columns=['A','B','C']).cumsum()
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在一个图中绘制它们,以便:
目前我最接近的是以下内容:
ax = df1.plot(style=['b','y','g'])
df2.plot(ax=ax, style=['b','y','g'], linestyle='--')
Run Code Online (Sandbox Code Playgroud)
有没有办法获取DataFrame.plot()默认使用的颜色代码?或者还有其他更好的方法来实现我想要的吗?理想情况下,我不想style使用参数指定任何颜色代码,但始终使用默认颜色.
我想禁用Python散列函数的随机化。根据此线程(无法通过模块查看或修改 PYTHONHASHSEED 的值),通过os.environ['PYTHONHASHSEED']在运行时设置来设置 PYTHONHASHSEED不起作用。运行 Jupyter Notebook 时如何将 PYTHONHASHSEED 设置为固定值?
(A) 这有效:
def func():
x = 1
print(x)
return
Run Code Online (Sandbox Code Playgroud)
(B) 这不起作用:
def func():
x = 1
print(x)
return
Run Code Online (Sandbox Code Playgroud)
(C) 这也不起作用:(这里我使用“_”来表示空格)
def func():
x = 1
____
print(x)
return
Run Code Online (Sandbox Code Playgroud)
(D) 这有效:
def func():
x = 1
____# some comment
print(x)
return
Run Code Online (Sandbox Code Playgroud)
在 (B) 和 (C) 中,我都收到以下错误:
我正在使用 Eclipse 和 PyDev 插件。Python 版本是 3.5,PyDev 版本是 4.5。
- - - - - 更新 - - - - -
该问题在 Jupyter Notebook 和 PyCharm 中无法重现。
在 Eclipse …
pandas.DataFrame.droplevel我可以使用级别名称或索引在某些位置保留多级索引/列的某些功能吗?
例:
df = pd.DataFrame([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
], columns=['a','b','c','d']).set_index(['a','b','c']).T
a 1 5 9 13
b 2 6 10 14
c 3 7 11 15
d 4 8 12 16
Run Code Online (Sandbox Code Playgroud)
以下两个命令都可以返回以下数据帧:
df.droplevel(['a','b'], axis=1)
df.droplevel([0, 1], axis=1)
c 3 7 11 15
d 4 8 12 16
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个“ keeplevel”命令,以便以下两个命令都可以返回以下数据帧:
df.keeplevel(['a','b'], axis=1)
df.keeplevel([0, 1], axis=1)
a 1 5 9 13
b 2 6 10 14
d 4 8 …Run Code Online (Sandbox Code Playgroud) 例:
public class ListInheritanceTest
{
public void Test1()
{
List<string> list = new List<string>();
MyList myList = list;
}
}
public class MyList : List<string>
{
}
Run Code Online (Sandbox Code Playgroud)
但MyList myList = list有错误"无法将类型'System.Collections.Generic.List'隐式转换为'ConsoleTest.MyList'"
我怎样才能解决这个问题?谢谢.
----编辑----
我不是在问它为什么会出错.我想知道使分配工作的解决方法是什么.上面的代码只是一个简化的例子.目的是List<SomeType>在我的代码中将all转换为MyList,而不会引入任何向后不兼容.
---第二次编辑----
让我重新解释一下这个问题.假设我在上面的代码中以相同的方式定义了MyList.分配List<string>给MyList 的最简单方法是什么.
我知道
foreach(var item in list)
mylist.Add(item)
Run Code Online (Sandbox Code Playgroud)
总是工作.只是寻找更优雅的东西.
首先让我描述一下我试图用 Python 重现的 Excel 数据透视图。
以下是生成示例数据集的代码:
# The code should work in Python 3.7 and pandas 0.24 or above
import pandas as pd
years = [i for i in range(2015,2021)]
countries = ['US', 'CA', 'JP', 'MX', 'IT']
months = [i for i in range(1,13)]
idx = pd.MultiIndex.from_product([years, countries, months], names=['year', 'country', 'month'])
df = pd.DataFrame(np.random.randn(len(idx), 1),columns=['val'], index=idx).sort_index()
Run Code Online (Sandbox Code Playgroud)
我可以将df.to_clipboard()其粘贴到 Excel 中,如下所示:
然后我可以根据数据插入数据透视图,并以某种方式配置它,以便我可以按年份和国家/地区查看每月线图。该数据透视图是“交互式”的,因为通过“年份”和“国家/地区”下拉控件,我可以以任何我想要的方式方便地过滤数据,例如“显示 JP 的所有年份”或“显示 2020 年的所有国家/地区” ”。
我的问题是:
有没有简单的方法可以在 Python 中创建这样的交互式绘图?我使用 Jupyter Notebook 来处理数据并做了很多这样的探索性研究。我不喜欢每次想要可视化数据时都必须将数据复制到 Excel 中。在Python中,我可以做一些愚蠢的事情,比如df.loc[(2015, 'US'),:].plot() …