小编Lon*_*Rob的帖子

从numpy或pandas邻接矩阵的igraph图

我有一个邻接矩阵存储为pandas.DataFrame:

node_names = ['A', 'B', 'C']
a = pd.DataFrame([[1,2,3],[3,1,1],[4,0,2]],
    index=node_names, columns=node_names)
a_numpy = a.as_matrix()
Run Code Online (Sandbox Code Playgroud)

我想igraph.Graph从邻接矩阵pandasnumpy邻接矩阵创建一个.在理想的世界中,节点将按预期命名.

这可能吗?该教程似乎对此问题保持沉默.

python numpy igraph pandas

20
推荐指数
2
解决办法
1万
查看次数

GroupBy结果列表的列表

我有一张excel表,看起来像这样:

Column1 Column2 Column3
0       23      1
1       5       2
1       2       3
1       19      5
2       56      1
2       22      2
3       2       4
3       14      5
4       59      1
5       44      1
5       1       2
5       87      3
Run Code Online (Sandbox Code Playgroud)

我希望提取该数据,将其按第1列分组,然后将其添加到字典中,使其显示如下:

{0: [1],
1: [2,3,5],
2: [1,2],
3: [4,5],
4: [1],
5: [1,2,3]}
Run Code Online (Sandbox Code Playgroud)

到目前为止这是我的代码

excel = pandas.read_excel(r"e:\test_data.xlsx", sheetname='mySheet', parse_cols'A,C')
myTable = excel.groupby("Column1").groups
print myTable
Run Code Online (Sandbox Code Playgroud)

但是,我的输出看起来像这样:

{0: [0L], 1: [1L, 2L, 3L], 2: [4L, 5L], 3: [6L, 7L], 4: [8L], 5: …
Run Code Online (Sandbox Code Playgroud)

python xlrd pandas

20
推荐指数
2
解决办法
1万
查看次数

未处理的拒绝MongoError:必须指定端口

根据Mongoose文档,您可以使用默认端口27017连接到MongoDB.

我的mongod输出结束于:

 I NETWORK  [initandlisten] waiting for connections on port 27017
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试连接到我的数据库时,如下所示:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/myapp');
Run Code Online (Sandbox Code Playgroud)

我明白了

Unhandled rejection MongoError: port must be specified
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

我有Mongoose v5.2.0,节点v9.10.0和MongoDB shell版本v4.0.0.

如果我更改我的连接字符串以包含端口,mongodb://localhost:27017/myapp那么我能够连接.但我不确定为什么我需要这个.

mongoose node.js

20
推荐指数
2
解决办法
4805
查看次数

熊猫相当于Stata的编码

我正在寻找一种方法来复制Stata中的编码行为,它将分类字符串列转换为数字列.

x = pd.DataFrame({'cat':['A','A','B'], 'val':[10,20,30]})
x = x.set_index('cat')
Run Code Online (Sandbox Code Playgroud)

结果如下:

     val
cat     
A     10
A     20
B     30
Run Code Online (Sandbox Code Playgroud)

我想将cat列从字符串转换为整数,将每个唯一字符串映射到(任意)整数1对1.这将导致:

     val
cat     
1     10
1     20
2     30
Run Code Online (Sandbox Code Playgroud)

或者,同样好:

  cat  val
0   1   10
1   1   20
2   2   30
Run Code Online (Sandbox Code Playgroud)

有什么建议?

非常感谢Rob

python stata pandas

15
推荐指数
2
解决办法
1295
查看次数

用户在Python中输入后,"NameError:name''未定义"

我完全迷失了为什么这不起作用.应该准确地工作吧?

UserName = input("Please enter your name: ")
print ("Hello Mr. " + UserName)
raw_input("<Press Enter to quit.>")
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

Traceback (most recent call last):  
  File "Test1.py", line 1, in <module>
    UserName = input("Please enter your name: ")
  File "<string>", line 1, in <module>
NameError: name 'k' is not defined  
Run Code Online (Sandbox Code Playgroud)

它说NameError 'k',因为我'k'在测试期间写了输入.我已经读过print语句曾经没有括号但是已被弃用了吗?

python

14
推荐指数
2
解决办法
8213
查看次数

创建matplotlib图时"dvipng:not found"

我尝试使用matplotlib绘制频率直方图,但它不起作用,我不知道问题在哪里...

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

data = np.array([58.35, 71.83, 49.25, 38.89, 12.6, 58.34, 34.5, 11.6, 64.66, \
89.14, 101.84, 26.91, 38.74, 65.03, 35.23, 70.73, 54.52, 73.36, 74.35, \
60.54, 73.52, 24.58, 50.31, 55.63, 14.6, 53.64, 81.6])

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

n, bins, patches=ax.hist(data, 10, facecolor='green', alpha=0.75)

ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda y, pos: ('%.2f')%(y*1e-3)))
ax.set_ylabel('Frequency (000s)')

plt.show()
Run Code Online (Sandbox Code Playgroud)

错误消息的一部分:

sh: 1: dvipng: not found
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", …
Run Code Online (Sandbox Code Playgroud)

python matplotlib histogram

14
推荐指数
2
解决办法
7967
查看次数

当输出依赖于其他元素时,以pythonic方式在列表上操作

我有一个任务需要对列表的每个元素进行操作,操作的结果取决于列表中的其他元素.

例如,我可能希望以特定字符开头连接条件列表:

此代码解决了以下问题:

x = ['*a', 'b', 'c', '*d', 'e', '*f', '*g']
concat = []
for element in x:
    if element.startswith('*'):
        concat.append(element)
    else:
        concat[len(concat) - 1] += element
Run Code Online (Sandbox Code Playgroud)

导致:

concat
Out[16]: ['*abc', '*de', '*f', '*g']
Run Code Online (Sandbox Code Playgroud)

但这似乎非常恐怖.list当操作结果取决于先前的结果时,如何对a的元素进行操作?

python

12
推荐指数
3
解决办法
554
查看次数

我应该如何使用“始终验证”指定 Pydantic 字段的默认值以满足类型检查器的要求?

当我使用Pydantic 文档中的这样的代码片段时,我的类型检查器会对我抱怨:

from datetime import datetime

from pydantic import BaseModel, validator


class DemoModel(BaseModel):
    ts: datetime = None  # Expression of type "None" cannot be 
                         # assigned to declared type "datetime"

    @validator('ts', pre=True, always=True)
    def set_ts_now(cls, v):
        return v or datetime.now()
Run Code Online (Sandbox Code Playgroud)

到目前为止我的解决方法是:

ts: datetime = datetime(1970, 1, 1)  # yuck
Run Code Online (Sandbox Code Playgroud)
ts: datetime = None  # type: ignore
Run Code Online (Sandbox Code Playgroud)
ts: Optional[datetime] = None  # Not really true. `ts` is not optional.
Run Code Online (Sandbox Code Playgroud)

是否有解决这个难题的首选方法?

或者是否有我可以使用的类型检查器不介意这一点?

python pydantic

12
推荐指数
2
解决办法
2万
查看次数

如何更新MultiIndexed pandas DataFrame的子集

我正在使用MultiIndexed pandas DataFrame,并希望将DataFrame的子集乘以一定数量.

它与相同,但具有MultiIndex.

>>> d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009], 
                      'flavour':['strawberry','strawberry','banana','banana',
                      'strawberry','strawberry','banana','banana'],
                      'day':['sat','sun','sat','sun','sat','sun','sat','sun'],
                      'sales':[10,12,22,23,11,13,23,24]})

>>> d = d.set_index(['year','flavour','day'])                  

>>> d
                     sales
year flavour    day       
2008 strawberry sat     10
                sun     12
     banana     sat     22
                sun     23
2009 strawberry sat     11
                sun     13
     banana     sat     23
                sun     24
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,让我说我发现星期六的数字只是他们应该的一半!我想将所有sat销售额乘以2.

我的第一次尝试是:

sat = d.xs('sat', level='day')
sat = sat * 2
d.update(sat)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为变量sat已经失去day了索引的级别:

>>> sat
                 sales
year flavour          
2008 strawberry     20
     banana         44
2009 strawberry     22
     banana         46 …
Run Code Online (Sandbox Code Playgroud)

python pandas

11
推荐指数
2
解决办法
3519
查看次数

如何在读取CSV文件时捕获`CParserError`

我想将CSV列表读入数据帧.但是,我在捕获文件具有与数据本身不匹配的标题行(即元数据或其他空行)时发生的错误时遇到问题.此错误是'CParserError'(请参阅底部的错误消息).

我目前的解决方案是使用try-except语句

try:
    #read file
except CParserError:
    #give me an error message
Run Code Online (Sandbox Code Playgroud)

但是,这失败并出现以下错误:

NameError: name 'CParserError' is not defined
Run Code Online (Sandbox Code Playgroud)

我的代码如下.正如您所看到的,我认为我需要多个except语句来捕获各种错误.第一个应检查默认编码类型是否有效(文件永远不会是utf-8或latin-1以外的任何文件).如果有标题行,pd.read_csv会给出一个'CParserError'消息(见下文),我需要捕获它.然后,如果还有其他杂项问题,我也想抓住这些问题.

任何解决方案都欢迎,理想情况下可以解释为什么CParserError不正确,或者是否可以修改try-except逻辑以避免依赖于此.

谢谢.

files_list = glob.glob('*.csv*')     #get all csvs
files_dict = {}           
for file in files_list:
    try:
        files_dict[file] = pd.read_csv('DFA_me_week27.csv', encoding='utf-8').read() 
    except UnicodeDecodeError:    
        files_dict[file] = pd.read_csv('DFA_me_week27.csv', encoding='Latin-1').read()
    except CParserError:
        print(file, 'failed: check for header rows')
    except:
        print(file, 'failed: some other error occurred')
Run Code Online (Sandbox Code Playgroud)

尝试使用标头解析CSV文件时出现错误消息:

CParserError                              Traceback (most recent call last)
<ipython-input-15-e454c053d675> in <module>()
----> 1 pd.read_csv('DFA_me_week27.csv')

C:\Users\john.lwli\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, dialect, compression, …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

11
推荐指数
1
解决办法
4214
查看次数