相关疑难解决方法(0)

Pandas DataFrame ApplyMap方法

我想试试applymapPandas DataFrame对象方法的功能.这是用例:

假设我的DataFrame df1如下:

Age   ID       Name
0   27  101    John
1   22  102    Bob
2   19  103    Alok
3   27  104    Tom
4   32  105    Matt
5   19  106    Steve
6    5  107    Tom
7   55  108    Dick
8   67  109    Harry
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个标志变量,其逻辑是如果元素的长度小于2,则flag = 1 else flag = 0.

为了运行这个元素,我想使用applymap方法.为此,我创建了一个用户定义的函数,如下所示:

def f(x): 
   if len(str(x))>2: 
       df1['Flag']=1
   else: 
      df1['Flag']=0
Run Code Online (Sandbox Code Playgroud)

然后我跑df1.applymap(f)了给了:

    Age    ID  Name
0  None  None  None
1  None  None  None
2  None …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Pandas为单个数据帧设置格式

有没有办法只格式化特定的数据帧?

我已经看到了格式化单个数据帧的特定列的示例(示例1)或将整个pandas库设置为默认选项(示例2).但是,我没有看到在没有明确列出每列的情况下格式化特定数据框的选项.

建立

import pandas as pd
import numpy as np

# Setup first example
data = np.random.random((3,4))
df = pd.DataFrame(data)
print df
#          0         1         2         3
#0  0.384326  0.364187  0.084034  0.012376
#1  0.114784  0.298068  0.087634  0.828207
#2  0.255923  0.438617  0.820652  0.266964
Run Code Online (Sandbox Code Playgroud)

示例1 - 更改单个数据帧中特定列的格式

df[3] = df[3].map('${:,.2f}'.format)
print df
#          0         1         2      3
#0  0.384326  0.364187  0.084034  $0.01
#1  0.114784  0.298068  0.087634  $0.83
#2  0.255923  0.438617  0.820652  $0.27
Run Code Online (Sandbox Code Playgroud)

示例2 - 更改所有pandas数据帧的格式(包括新的)

pd.options.display.float_format = '${:,.2f}'.format
print(df)
# …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

将 pandas 数据帧有效地传递给函数

def function_name(df):
    for i, row in df.iterrows():
        df.set_value(...)
    return df

if __name__ == '__main__':
    # Assume we have a dataframe called idf
    idf = function_name(idf)
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我将一个名为 idf 的数据帧传递到一个名为 function_name 的函数中。在该函数中,我循环遍历数据帧中的所有行,进行一些修改并返回一个数据帧,并将其存储回 idf 中。

我有一种感觉,这种方法正在浪费内存,有人可以纠正我或指出更好的Pythonic方法吗?请注意,我有充分的理由使用 iterrows,即使它使一切变慢,我只是想要一些关于我将数据帧传递给函数并将其返回的方式的反馈

- -编辑 -

根据@marius 的反馈,我想知道的是:

通过将数据帧传递到函数中,我是否制作了数据帧的新副本?这就是我担心的内存浪费

python pandas

5
推荐指数
0
解决办法
3518
查看次数

将字符串转回日期时间时间增量

我的 Pandas 数据框中的一列代表我用 datetime 计算的时间增量,然后导出到 csv 并读回 Pandas 数据框中。现在该列的 dtype 是 object 而我希望它是 timedelta 这样我就可以在数据帧上执行 groupby 函数。下面是字符串的样子。谢谢!

  0 days 00:00:57.416000
  0 days 00:00:12.036000
  0 days 16:46:23.127000  
 49 days 00:09:30.813000  
 50 days 00:39:31.306000  
 55 days 12:39:32.269000
-1 days +22:03:05.256000
Run Code Online (Sandbox Code Playgroud)

更新,我最好尝试编写一个 for 循环来迭代我的 Pandas 数据帧中的特定列:

def delta(i):
    days, timestamp = i.split(" days ")
    timestamp = timestamp[:len(timestamp)-7]
    t = datetime.datetime.strptime(timestamp,"%H:%M:%S") + 
    datetime.timedelta(days=int(days))
    delta = datetime.timedelta(days=t.day, hours=t.hour, 
    minutes=t.minute, seconds=t.second)
    delta.total_seconds()

data['diff'].map(delta)
Run Code Online (Sandbox Code Playgroud)

python datetime timedelta pandas

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

pandas.DataFrame和numpy.array中的np.isreal行为不同

我有一个array像下面

np.array(["hello","world",{"a":5,"b":6,"c":8},"usa","india",{"d":9,"e":10,"f":11}])
Run Code Online (Sandbox Code Playgroud)

pandas DataFrame下面一样

df = pd.DataFrame({'A': ["hello","world",{"a":5,"b":6,"c":8},"usa","india",{"d":9,"e":10,"f":11}]})
Run Code Online (Sandbox Code Playgroud)

当我申请np.isrealDataFrame

df.applymap(np.isreal)
Out[811]: 
       A
0  False
1  False
2   True
3  False
4  False
5   True
Run Code Online (Sandbox Code Playgroud)

当我np.isrealnumpy阵列做的时候.

np.isreal( np.array(["hello","world",{"a":5,"b":6,"c":8},"usa","india",{"d":9,"e":10,"f":11}]))
Out[813]: array([ True,  True,  True,  True,  True,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

我必须使用np.isreal错误的用例,但是你能帮我解释为什么结果不同吗?

python numpy pandas

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

根据浮点列是否为整数(`float.is_integer`)在由True,False填充的pandas df中创建新列

我有一只熊猫df,那里df['value']有一系列的花车。

  • 一些浮点数将是整数(如 25.0)。我想创建一个新的列,df['is_it_whole'][i]其值1(或True)被相应的df['value'][i]是一个整数,0False以其他方式。
  • 我知道我可以做一个 for 循环,但我想知道是否有任何技巧可以用来快速完成(我有一个很大的 df)。
  • 我尝试使用df['is_it_whole'] = df['value'].is_integer()但熊猫系列不支持该is_integer方法,我正在寻找类似的方法。

建议?

python dataframe pandas

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

如何在Python中提取字符串中的列表?

我使用Pandas导入了CSV,并使用字符串条目读入了一列.检查本系列(列)的条目,我发现它们实际上应该是列表.例如:

df['A'] = pd.Series(['["entry11"]', '["entry21","entry22"]', '["entry31","entry32"]'])
Run Code Online (Sandbox Code Playgroud)

我想从字符串中提取列表元素.到目前为止,我已经尝试了以下链:

df['A'] = df['A'].replace("'",'',regex=True).
                  replace('\[','',regex=True).
                  replace('\]','',regex=True).
                  str.split(",")
Run Code Online (Sandbox Code Playgroud)

(当然,所有在一条线上).

这让我在一列中找回了我想要的列表元素.

  • [ ' "entry11"']
  • ['"entry21","entry22"']
  • ['"entry31","entry32"']

我的问题:有没有更有效的方法呢?对于应该更容易一些的东西来说,这似乎很紧张.

python

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

将pandas列中的值替换为缺少键的默认值

我有多个简单的函数需要在我的数据帧的某些列的每一行上实现.数据帧很像,1000万+行.我的数据框是这样的:

Date      location   city        number  value
12/3/2018   NY       New York      2      500
12/1/2018   MN       Minneapolis   3      600
12/2/2018   NY       Rochester     1      800
12/3/2018   WA       Seattle       2      400
Run Code Online (Sandbox Code Playgroud)

我有这样的功能:

def normalized_location(row):
    if row['city'] == " Minneapolis":
        return "FCM"
    elif row['city'] == "Seattle":
        return "FCS"
    else:
        return "Other"
Run Code Online (Sandbox Code Playgroud)

然后我用:

df['Normalized Location'] =df.apply (lambda row: normalized_location (row),axis=1)
Run Code Online (Sandbox Code Playgroud)

这非常慢,我怎样才能提高效率呢?

python lambda replace dataframe pandas

4
推荐指数
2
解决办法
802
查看次数

如何编写一个Python程序来计算输入表的每一行的结果?

我正在尝试制作一个Python程序,它将根据公式、给定因素和输入数据帧计算结果。

N_cars我在给定的道路长度 ( ) 上有许多汽车 ( l) 及其平均速度 ( v):

input_columns = ['l', 'N_cars', 'v']
input_data = [[3.5, 1000, 100], [5.7, 500, 110], 
              [10, 367, 110], [11.1, 1800, 95],
              [2.8, 960, 105], [4.7, 800, 120], 
              [10.4, 103, 111], [20.1, 1950, 115]]
        
input_df = pd.DataFrame(input_data, columns=input_columns)
input_df

      l  N_cars    v
0   3.5    1000  100
1   5.7     500  110
2  10.0     367  110
3  11.1    1800   95
4   2.8     960  105
5   4.7     800  120
6  10.4     103  111 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Pandas 将 lambda 应用于整个数据框

谁能解释一下为什么这段代码不起作用?

wordsCount = {}

def addWord(x):
    print(x)

df.apply(addWord(x))
Run Code Online (Sandbox Code Playgroud)

它返回错误: TypeError: ("'NoneType' object is not callable", 'occurred at index 0') 数据帧 df 在某些单元格中包含一些 None 值。我的意图是将函数应用于所有非 None 值。

python lambda dataframe pandas

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

使用 Dataframes style.apply 基于比较值突出显示

在我的代码中,我使用 df.style.applymap() 将 HTML 呈现到我的 Intranet 网页上。我有以下代码对我来说效果很好(2 列被传递给我的函数 highlight_vals)。

def highlight_vals(val, color='green', color1='red'):
        if val > 0.8:
            return 'background-color: %s' % color
        elif val < -0.9:
            return 'background-color: %s' % color1
        else:
            return ''
Run Code Online (Sandbox Code Playgroud)

现在,我想制作一个类似的函数(或曾经使用当前的 highlight_vals),以便在以下行的条件下实现比较突出显示:
if ValinColumn1 > 0.25 * ValinColumn2: # (For same Row/Record)
return 'background-颜色:%s' % 颜色 #黄色/高光。


我在我的views.py 中使用了上面的函数:
httresp += df.style.applymap(highlight_vals,subset=[col1,col2])

html css python dataframe pandas

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

pandas dataframe应用lambda if else erro

我正在尝试将lambda与if-else条件应用于pandas df df如下所示:

col1 col2 col3 col4 <---column names
None None None col4 <---column values in str
col1 None None None
None col2 None None



df_twitter_archive_master[['col1','col2','col3','col4']].apply(lambda x: x=0 if x=='None' else x=1)
Run Code Online (Sandbox Code Playgroud)

基本上,它应该用0替换'None'值,否则用1替换但是我一直得到这个错误

df_twitter_archive_master[['col1','col2','col3','col4']].apply(lambda x: x=0 if x=='None' else x=1)

SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

^在x = 1下

我究竟做错了什么??

python lambda pandas

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

如何在python中将多值变量转换为整数

如果我有一个带有两个值的变量(例如,性别可以是男性或女性),我会使用类似的代码,

train_df["Sex"] = train_df["Sex"].apply(lambda sex: 0 if sex == 'male' else 1)
Run Code Online (Sandbox Code Playgroud)

将字符串转换为整数。如果变量采用 2 个以上的值,例如分类为低/中/高的薪水,有什么方法可以做到?如何像上面一样赋值?

python pandas

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

标签 统计

python ×13

pandas ×12

dataframe ×4

lambda ×3

css ×1

datetime ×1

html ×1

numpy ×1

replace ×1

timedelta ×1