小编fan*_*ous的帖子

如果pandas dataframe.loc位置不存在,则返回default

我发现在尝试引用它之前,我经常需要检查数据框中是否存在列或行.例如,我最终添加了许多代码,如:

if 'mycol' in df.columns and 'myindex' in df.index: x = df.loc[myindex, mycol]
else: x = mydefault
Run Code Online (Sandbox Code Playgroud)

有没有办法更好地做到这一点?例如,在我可以做的任意对象上x = getattr(anobject, 'id', default)- 在熊猫中有类似的东西吗?真的有办法实现我正在做的更优雅吗?

python pandas

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

在python中将整数(YYYYMMDD)转换为日期格式(mm/dd/yyyy)

我有以下数据框.

id int_date  
1  20160228  
2  20161231  
3  20160618  
4  20170123  
5  20151124
Run Code Online (Sandbox Code Playgroud)

如何将int格式的上述日期转换为mm/dd/yyyy的日期格式?想要以特定格式进行进一步的excel操作吗?

id int_date  
1  02/28/2016  
2  12/31/2016  
3  06/18/2016
4  01/23/2017
5  11/24/2015
Run Code Online (Sandbox Code Playgroud)

是否也可以生成第三列,单词只有几个字?像int_date的1月,2月等?

我试过跟随

date = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8]))
Run Code Online (Sandbox Code Playgroud)

但是date是在datetime对象中,如何把它作为日期放在pandas DF中?

python date pandas

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

在 pandas 1.4 中使用 concat 将字典添加到 Pandas DataFrame 中的行

更新到 pandas 1.4 后,当使用 frame.append 将字典附加到 Pandas DataFrame 时,我现在收到以下警告。

FutureWarning: The frame.append method is deprecated and will be
removed from pandas in a future version. Use pandas.concat instead.
Run Code Online (Sandbox Code Playgroud)

下面是代码。尽管我想解决该警告,但这仍然有效。

report = report.append({
                "period":period,
                "symbol":symbol,
                "start_date":start_date,
                "start_price":start_price,
                "start_market_cap":start_market_cap,
                "end_date":end_date,
                "end_price":end_price,
                "end_market_cap":end_market_cap,
                "return":return_
            },ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

我已将代码更新为以下内容,这会引发不同的警告:

report = pd.concat([report,{
                "period":period,
                "symbol":symbol,
                "start_date":start_date,
                "start_price":start_price,
                "start_market_cap":start_market_cap,
                "end_date":end_date,
                "end_price":end_price,
                "end_market_cap":end_market_cap,
                "return":return_
            }],ignore_index=True)

TypeError: cannot concatenate object of type '<class 'dict'>'; only Series and DataFrame objs are valid
Run Code Online (Sandbox Code Playgroud)

2个问题:第一个警告是错误的吗?pandas 1.4 实现这一目标的方法是什么?谢谢。

python concatenation pandas

9
推荐指数
2
解决办法
5440
查看次数

pandas HDFStore按日期时间索引选择行

我确定这可能非常简单,但我无法弄清楚如何通过其datetime索引切片pandas HDFStore表来获取特定的行范围.

我有一个看起来像这样的表:

mdstore = pd.HDFStore(store.h5)
histTable = '/ES_USD20120615_MIDPOINT30s'
print(mdstore[histTable])
                         open      high       low     close  volume  WAP  \
date                                                                       
2011-12-04 23:00:00  1266.000  1266.000  1266.000  1266.000      -1   -1   
2011-12-04 23:00:30  1266.000  1272.375  1240.625  1240.875      -1   -1   
2011-12-04 23:01:00  1240.875  1242.250  1240.500  1242.125      -1   -1   
                   ...
[488000 rows x 7 columns]
Run Code Online (Sandbox Code Playgroud)

例如,我想从2012-01-11 23:00:00到2012-01-12 22:30:00获取范围.如果它是在df我只会使用日期时间来切片索引,但我无法弄清楚如何直接从存储表中执行此操作,因此我不必将整个内容加载到内存中.我尝试了,mdstore.select(histTable, where='index>20120111')并且在11日和12日我得到了所有东西,但是我看不出如何增加时间.

pytables pandas

3
推荐指数
1
解决办法
1773
查看次数

从 python 线程(而不是主线程)启动 pyQt 线程有什么不好?

我有一个 python 控制台脚本,我想向其中添加一个基本状态窗口,因此在不太了解 pyqt 的情况下,我添加了一个窗口。如果我从主线程启动 pyqt,它会阻塞其他所有内容,因此我从另一个线程启动它。几个月来它一直运行良好,但我刚刚注意到一个警告(不知道我之前是如何错过的): WARNING: QApplication was not created in the main() thread.我想知道这可能会导致什么问题。

这是我正在使用的代码的精简版本,仅更新窗口标题栏:

from PyQt4 import QtGui, QtCore
import threading
import sys
from time import sleep

class MainWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)
        self.setWindowTitle(statusLine)
        self.timer = QtCore.QBasicTimer()
        self.timer.start(500, self)


    def updateWindow(self):
        self.setWindowTitle(statusLine)


    def timerEvent(self, event):
        if event.timerId() == self.timer.timerId():
            self.updateWindow()
        else:
            super(MainWidget, self).timerEvent(event)


def startWindow():
    app = QtGui.QApplication(sys.argv)
    mw = MainWidget()
    mw.show()
    app.exec_()


if __name__ == '__main__':
    global statusLine
    statusLine = 'foo'
    threadWindow = threading.Thread(target=startWindow)
    threadWindow.start() …
Run Code Online (Sandbox Code Playgroud)

python multithreading pyqt

3
推荐指数
1
解决办法
1513
查看次数

将 url 保存到文件并将其保存在内存中

在 Python 3.3 中,有没有一种方法可以一步将 url 保存到文件并将文件保存在内存中?我想避免下载文件两次(浪费带宽),也想避免将文件下载到磁盘,然后从磁盘读取文件(浪费磁盘 IO)。

要将其下载到内存中,我看到:

import urllib.request
myurl = 'http://blahblah/acsvfile.csv'
myreq = urllib.request.urlopen(myurl)    
mydata = myreq.read()
Run Code Online (Sandbox Code Playgroud)

并将其直接下载到磁盘,我看到了这一点(它似乎很快就会被弃用):

urllib.request.urlretrieve(myurl, myfilename)
Run Code Online (Sandbox Code Playgroud)

但是我看不到如何让 urlopen 也将文件的原始副本保存到磁盘,或者 urlretrieve 也让我读取 url 的数据。

提前感谢您的任何想法。

python urllib

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

复制pyqt表选择,包括列和行标题

我想复制qt表的选定部分,包括标题。默认的qt表副本仅复制一个单元格,而我需要整个选择,可以是多列和多行。我已经从不同的地方(大部分是在这里)将一些代码拼接在一起,并且似乎只工作于单元格(数据)而不是标头,但它似乎运作良好。我也需要一些帮助来获取选择的标题。这是我瘦下来的样品:

from PyQt4 import QtGui, QtCore
import sys

class MainWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)

        self.table = QtGui.QTableWidget(parent=self)
        self.table.setColumnCount(2)
        self.table.setRowCount(2)
        self.table.setHorizontalHeaderLabels(['col1','col2'])
        self.table.setVerticalHeaderLabels(['row1','row2'])
        self.table.setItem(0,0,QtGui.QTableWidgetItem('foo'))
        self.table.setItem(0,1,QtGui.QTableWidgetItem('bar'))
        self.table.setItem(1,0,QtGui.QTableWidgetItem('baz'))
        self.table.setItem(1,1,QtGui.QTableWidgetItem('qux'))

        layout = QtGui.QGridLayout()
        layout.addWidget(self.table, 1, 0)
        self.setLayout(layout)

        self.clip = QtGui.QApplication.clipboard()


    def keyPressEvent(self, e):
        if (e.modifiers() & QtCore.Qt.ControlModifier):
            selected = self.table.selectedRanges()

            if e.key() == QtCore.Qt.Key_C: #copy
                s = ""

                for r in xrange(selected[0].topRow(), selected[0].bottomRow()+1):
                    for c in xrange(selected[0].leftColumn(), selected[0].rightColumn()+1):
                        try:
                            s += str(self.table.item(r,c).text()) + "\t"
                        except AttributeError:
                            s += "\t"
                    s = s[:-1] …
Run Code Online (Sandbox Code Playgroud)

python pyqt

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

标签 统计

python ×6

pandas ×4

pyqt ×2

concatenation ×1

date ×1

multithreading ×1

pytables ×1

urllib ×1