如何使用 Pandas 创建带有数据帧 URL 的条件列

问题描述 投票:0回答:2

我正在尝试使用 pandas.DataFrame.apply 创建条件列。

目标是:当我单击按钮

Click here
时,我应该得到一个 csv,其中仅包含与所选社区匹配的行(在我们的例子中,一个具有单行和单列的数据框 = 社区)。

代码:

import pandas as pd
from IPython.display import HTML
import base64

df = pd.DataFrame({'Community': ['StackOverflow','GISExchange', 'DBAExchange']})

df.insert(1, "URL", 'Click here')

csv = df.to_csv(index=False)
b64 = base64.b64encode(csv.encode())
payload = b64.decode()

df['URL'] = df['URL'].apply(
    lambda x: f'<a download="{x}.csv" href="data:text/csv;base64,{payload}" target="_blank">{x}</a>')

>>>
HTML(df.to_html(escape=False))

enter image description here

上面代码的问题是超链接

Click here
给出了带有孔数据框的csv(包括三行)。

你知道如何解决这个问题吗?请问您有什么建议吗?

python pandas io base64
2个回答
1
投票

这是一种方法

df['URL'] = df.apply(lambda x: f"<a href=\"https://{x['Community_name']}.com/\">{x['Community_name']}</a>", axis=1)


或者,不使用 apply

df['URL'] = "<a href=\"https://" + df['Community_name'] + ".com/\">" + df['Community_name'] + "</a>"
df
    Community       URL
0   StackOverflow   <a href="https://StackOverflow.com/">StackOver...
1   GISExchange     <a href="https://GISExchange.com/">GISExchange...
2   DBAExchange     <a href="https://DBAExchange.com/">DBAExchange...

0
投票

经过一番努力,我最终得到了下面的代码来回答我的问题。

我首先创建了一个解码 csv 的函数,这样我就可以过滤数据帧。
然后,用 for 循环替换 .apply 方法。

import pandas as pd
from IPython.display import HTML
import base64

df = pd.DataFrame({'Community': ['StackOverflow','GISExchange', 'DBAExchange']})

df.insert(1, "URL", 'Click here')

def pyld(val):
    csv = df[df['Community']==val]['Community'].to_csv(index=False)
    b64 = base64.b64encode(csv.encode())
    payload = b64.decode()
    return payload

for i, row in df.iterrows():
    row['URL'] = f'<a download="data.csv" href="data:text/csv;base64,{pyld(df["Community"][i])}" target="_blank">Click here</a>'

>>>
HTML(df.to_html(escape=False))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.