当前位置: 首页 > 知识库问答 >
问题:

如何将方法应用于数据帧[duplicate]

池砚文
2023-03-14

我有这个数据框

   Col1              Col2

0  A (1000 EUR)  C ( 3000 USD)

1  B (2000 CHF)  D ( 4000 GBP)

我想把它转换成

   Col1  Col2

0  1000  3000

1  2000  4000

我知道如何创建一个数据框(与索引)为1列,但不是为多个列

此代码产生此结果

   Col1

0  1000

1  2000 

a = z['Col1'].str.split('(').str[-1].str.split().str[0].apply(pd.to_numeric,errors='coerce')

如何修改上面的代码以添加col2(理想情况下使用矢量化而不是迭代)(因此理想情况下我不希望为每一列输入相同的代码)

共有3个答案

郎鸿
2023-03-14

可以使用apply函数将操作应用于两行中的所有元素。

# creates your dataframe
df = pd.DataFrame({'Col1':['A (1000 EUR)','B (2000 CHF)'], 'Col2':['C (3000 USD)', 'D (4000 GBP)']})

# use the apply function to  apply your code to all elements of both columns
df = df.apply(lambda x: x.str.split('(').str[-1].str.split().str[0].apply(pd.to_numeric,errors='coerce'))

这把戏对我有用吗

壤驷心思
2023-03-14

我会使用df.applymap。与df.apply的区别在于df.apply将整个系列(行或列)作为参数,并应用一个函数,其中df.applymap获取数据帧的每个元素并应用一个函数。试试这个:

df = df.applymap(lambda x: pd.to_numeric(str(x).split('(')[1].split()[0], errors='coerce'))

打印(df)

   Col1  Col2
0  1000  3000
1  2000  4000

df.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 2 entries, 0 to 1
Data columns (total 2 columns):
Col1    2 non-null int64
Col2    2 non-null int64
dtypes: int64(2)
memory usage: 48.0 bytes
None
东方嘉木
2023-03-14

您可以在每列上使用str.extract,并使用pd.concat根据结果构建新的数据帧:

x = np.concatenate([df[col].str.extract(r'(?<=\()\s*(\d+)') for col in df], axis=1)
pd.DataFrame(x, columns=df.columns)

   Col1  Col2
0  1000  3000
1  2000  4000
 类似资料:
  • 怎么办? **添加详细示例如下***

  • 我必须从二维坐标计算希尔伯特曲线上的距离。使用hilbertcurve包,我构建了自己的“hilbert”函数。坐标存储在数据帧(列1和列2)中。如您所见,我的函数在应用于两个值(test)时有效。 然而,它只是不工作时,应用行明智通过应用函数!这是为什么呢?我到底做错了什么?我需要一个额外的列“希尔伯特”,希尔伯特距离在列“col_1”和“col_2”中给出。 最后一个命令以错误结束: 谢谢你的

  • 并将其应用于数据表的一列--这是我希望这样做的: 我还没有找到任何简单的方法,正在努力找出如何做到这一点。一定有一个更简单的方法,比将数据rame转换为和RDD,然后从RDD中选择行来获得正确的字段,并将函数映射到所有的值,是吗?创建一个SQL表,然后用一个sparkSQL UDF来完成这个任务,这更简洁吗?

  • 我试图将此函数应用于pandas数据帧,以查看出租车上下车时间是否在我使用下面的arrivemin、ArriveMax变量创建的范围内。 如果时间真的在这个范围内,我想保留这一行。如果超出范围,我想从数据帧中删除它。 开始。时间,结束。时间等都是日期时间对象,所以时间功能应该工作正常。 继续获取此语法错误:

  • 我从这个URL刮取了这个表: "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/" 看起来像这样: 然后我编写了这个函数来帮助我将字符串转换成整数: 当我只将函数应用于一列时,它就会工作。我在这里找到了关于在多个列上使用的答案:如何将函数应用于多个列 但我下面的代码不起作用,也不会产生错误:

  • 我有一个派斯帕克数据帧 我想将其转换为与 pyspark.ml 一起使用。我可以使用字符串索引器将名称列转换为数字类别: 如何用StringIndexer(例如< code>name和< code>food,每个列都有自己的< code>StringIndexer)转换几个列,然后用VectorAssembler生成一个特征向量?还是必须为每一列创建一个< code>StringIndexer?