小编Bri*_*ian的帖子

当to_latex时,Pandas用任意数字替换NAN

我有一个大的多索引多列数据框df,我没有在这里显示.我生成一个像这样的索引片:

subDf = df.sort_index(level=0).loc[:'e']
Run Code Online (Sandbox Code Playgroud)

然后该片包含NaN在索引的第二级:

>>> subDf.iloc[0:1]
                  change
robustness value        
baseline   NaN     -14.5
Run Code Online (Sandbox Code Playgroud)

生成的csv to_csv()似乎是正确的:

>>> subDf.iloc[0:1].to_csv()
Out[15]: 'robustness,value,change\nbaseline,,-14.5\n'
Run Code Online (Sandbox Code Playgroud)

同样,to_html()功能就像被开除一样.但是,当我尝试获取latex_output时,NaN消失并50.00出现:

>>> subDf.iloc[0:1].to_latex()
Out[14]: u'\\begin{tabular}{llr}\n\\toprule\n                &       &  change \\\\\nrobustness & value &         \\\\\n\\midrule\nbaseline & 50.00 &   -14.5 \\\\\n\\bottomrule\n\\end{tabular}\n'
Run Code Online (Sandbox Code Playgroud)

50.00是不完全任意数,它是在原始数据帧中的多指数的第二层的最后一个值:

>>> df.index
Out[18]: 
MultiIndex(levels=[[u'a', u'b', u'c', u'd', u'e', u'baseline', u'f'], [0.01, 0.04, 0.25, 0.75, 0.86, 0.99, 1.0, 2.0, 4.0, 10.0, 50.0]],
           labels=[[5, 6, 6, 2, 2, 1, 3, 3, …
Run Code Online (Sandbox Code Playgroud)

python nan pandas

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

pandas group by 函数应用于列

在 Groupby 文档中,我只看到了按应用于轴 0 索引或列标签的函数进行分组的示例。我没有看到讨论如何通过将函数应用于列而派生的标签进行分组的示例。我认为这将使用apply. 下面的例子是最好的方法吗?

df = pd.DataFrame({'name' : np.random.choice(['a','b','c','d','e'], 20), 
               'num1': np.random.randint(low = 30, high=100, size=20),
               'num2': np.random.randint(low = -3, high=9, size=20)})

df.head()

  name  num1 num2
0   d   34  7
1   b   49  6
2   a   51  -1
3   d   79  8
4   e   72  5

def num1_greater_than_60(number_num1):
    if number_num1 >= 60:
        return 'greater'
    else:
        return 'less'

df.groupby(df['num1'].apply(num1_greater_than_60))
Run Code Online (Sandbox Code Playgroud)

python group-by pandas

6
推荐指数
2
解决办法
1540
查看次数

通过逗号和数据透视表解析数据框列 - python

我正在尝试通过逗号解析出一列(也去除空白),然后将所有源/目标组合旋转到新行中。以下是数据示例:

Origin     Destination     Weight
PVG        AMS, FRA        10,000
CAN, XMN   LAX, ORD        25,000
Run Code Online (Sandbox Code Playgroud)

我在使用 pd.read_clipboard 重现上面的数据帧时遇到问题,所以这里是数据帧代码:

df = pd.DataFrame({'Origin': ['PVG', 'CAN, XMN'], 
                   'Destination': ['AMS, FRA', 'LAX, ORD'],
                   'Weight': [10000, 25000]})
Run Code Online (Sandbox Code Playgroud)

所需的输出是:

Origin     Destination     Weight
PVG        AMS             10,000
PVG        FRA             10,000
CAN        LAX             25,000   
CAN        ORD             25,000
XMN        LAX             25,000
XMN        ORD             25,000   
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用:

df['Origin'].str.split(',', expand = True)
Run Code Online (Sandbox Code Playgroud)

我曾尝试为起点和终点执行此操作,这适用于将字符串解析为单独的列。我正在努力将所有可​​能的组合创建到单独的行中(我尝试使用 pivot_table 并且没有运气而融化)。

python parsing pivot pandas

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

使用 Pandas 数据读取器提取股票信息

我正在使用 pandas datareader 来提取给定日期范围内的股票信息。例如:

import pandas_datareader.data as web
import datetime as dt

start = dt.datetime(2018,3,26)
end = dt.datetime(2018,3,29)

web.DataReader('IBM','yahoo', start, end).reset_index()
Run Code Online (Sandbox Code Playgroud)

这将为 IBM 返回以下数据帧:

在此处输入图片说明

这包含我正在寻找的信息,但我想自动遍历多个股票代码(而不是手动更改股票代码)。理想情况下,我可以通过所需的股票行情列表循环此代码。

python datareader stock pandas

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

将Pandas数据框转换为元组的元组

我有以下熊猫数据框 df:

     Description    Code
0    Apples         014
1    Oranges        015
2    Bananas        017
3    Grapes         021
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为元组的元组,如下所示:

my_fruits = ( ('Apples', '014'), 
              ('Oranges', '015'), 
              ('Bananas', '017'), 
              ('Grapes', '021')
            )
Run Code Online (Sandbox Code Playgroud)

你能帮我吗?我已经尝试了以下代码,但没有返回我真正想要的:

list(zip(df.columns,df.T.values.tolist()))
Run Code Online (Sandbox Code Playgroud)

提前致谢!!!

python tuples dataframe pandas

5
推荐指数
2
解决办法
1911
查看次数

在特定字符后从字符串中提取数字

我有一个数据帧(约100万行),其中包含一个列('Product'),其中包含'none','q1','q123'或'q12_a123'等字符串.

我想提取字母'q'后面的数字并将其输入另一列('AmountPaid'),以便它看起来如下所示:

'Product'    'AmountPaid'
 none            0
 q1              1
 q123            123
 q12_a123        12
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有:

for i in range(0,1000000):
   if 'q' not in df.loc[i,'Product']:
      df.loc[i,'AmountPaid']=0
   else:
      # set 'AmountPaid' to the number following 'q'
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 如何在字母"q"之后立即提取数字,但不一定是之后的所有内容?例如,从'q12_a123'中提取12.
  2. 大多数'AmountPaid'条目将被设置为0.是否有比for循环和if/else语句更有效的方法?

python regex string pandas

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

Pandas删除字符后的列中的所有字符串

所以我有一个超过500行的数据集,其中一列的值如下所示:

DF:

         column1

 0    a{'...'}  
 1    b{'...'}
 2    c{'...'}  
 3    d{'...'}  
Run Code Online (Sandbox Code Playgroud)

我想删除内部和内部的所有内容{}.

我一直在寻找这个问题,熊猫一个数据帧中指定的字符后,删除部分字符串,并试图解决方案有,但我不断收到错误(而据我所知,StringIO现在是io.StringIO).

我试过了

df.column1 = df.column1.str.split('{')[0]
Run Code Online (Sandbox Code Playgroud)

但得到错误信息:KeyError: 0 并不真正理解这意味着什么

我也尝试过:

df.column1 = df.column1.str.split(pat='{')
Run Code Online (Sandbox Code Playgroud)

但这似乎只删除了'{'所以我留下了

      column1

 0    a'...'}   
 1    b'...'}
 2    c'...'}   
 3    d'...'}   
Run Code Online (Sandbox Code Playgroud)

此外,我不确定它是否重要,但列是一种object类型.任何人都可以告诉我我做错了什么以及如何解决问题???

python replace object pandas

3
推荐指数
2
解决办法
2297
查看次数

如何将多个项目附加到pandas df?

我有数百个 Excel 文件,我想创建一个 df,其中一列中包含 Excel 文件的名称,第二列中包含每个选项卡的名称。我的脚本将迭代每个文件名,但我附加的方式不正确,而且我没有太多运气找到解决方案。

os.chdir(r'C:\Users\mbobak\Documents\\')
FileList = glob.glob('*.xlsx')

tabs= pd.DataFrame(columns=['filename','tabs'])

for filename in FileList:
    xl = pd.ExcelFile(filename).sheet_names
    tabs= tabs.append([filename,xl])
Run Code Online (Sandbox Code Playgroud)

期望的输出:

filename    tabs
doc1.xlsx   tab1
doc1.xlsx   tab2
doc1.xlsx   tab3
doc1.xlsx   tab4
doc2.xlsx   tab1
doc2.xlsx   tab2
doc2.xlsx   tab3
Run Code Online (Sandbox Code Playgroud)

python append dataframe pandas

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

根据 pandas 中其他两列的比较更改列的值

对于在 pandas 中创建的以下数据表,

Date        Score    Study_Date
02/2011      70       11/2012   
03/2011      72       11/2012   
10/2011      60       11/2012
12/2011      50       11/2012
01/2012      40       11/2012
02/2012      60       11/2012
03/2012      75       11/2012
11/2012      70       11/2012
12/2012      70       11/2012
01/2013      30       11/2012
02/2013      20       11/2012
04/2013      60       11/2012
06/2013      80       11/2012
Run Code Online (Sandbox Code Playgroud)

我想将日期早于研究日期的行的所有分数替换为 0。

我尝试了以下方法:

df[df.Date < df.Study_Date, 'Score']=0
Run Code Online (Sandbox Code Playgroud)

但我得到:

类型错误:“系列”对象是可变的,因此它们不能被散列

任何帮助将不胜感激。

python indexing time-series pandas

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

如何从 pandas 中的数据透视表生成干净的 DataFrame

我有下一个问题。

例如我在 Pandas 中有下一个 DataFrame

 a  b  c 
'x' 1 100
'y' 2 100
'z' 3 100
Run Code Online (Sandbox Code Playgroud)

现在我想根据列中的值创建a新 DataFrame 的标题,列中的值是我用于索引的b第一行和第一列中的对应值。c目前我使用下一个代码:

import pandas
piv = df.pivot(index='c', columns='a')
new_df = pandas.DataFrame(piv.to_records())
Run Code Online (Sandbox Code Playgroud)

输出对我来说不够合适,因为我有b一个新 DataFrame 的列名称。也许有人可以在这里告诉我一个更好的解决方案来准确获得下一个输出:

index 'x' 'y' 'z'
 100   1   2   3
Run Code Online (Sandbox Code Playgroud)

不应该是一个数据透视表,而只是一个真正的DataFrame。

python pivot pandas

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