【问题标题】:Python -Joining string values to first row in dataframePython - 将字符串值连接到数据框中的第一行
【发布时间】:2020-06-16 12:32:57
【问题描述】:

我正在尝试遍历多个 CSV 文件并将每个数据帧的每个“序列”列连接到第一个值。以下是每个文件的样子:

ID      Order    Sequence
1773     1        'AAGG'
1773     2        'TTGG'
1773     3        'GGAA'

我需要每个 CSV 看起来像这样:

ID       Sequence
1773   'AAGGTTGGGGAA'

在此之后我不再需要“订单”列。我尝试了许多不同的命令,但似乎找不到正确的命令。

现在我有:

path = r'C:\Users\CAAVR\Desktop\folder\*.csv'
for fname in glob.glob(path):
    df = pd.read_csv(fname)
    first = df['sequence'].iloc[:1]
    next = df['sequence'].iloc[2:]
    final = first.str.join(next)
    print(final)

我知道 .join() 不对,但 concat 和 merge 似乎也不起作用。继续获取:

AttributeError: 'Series' object has no attribute 'join'

如果您需要任何其他信息,请告诉我,感谢您的帮助!

【问题讨论】:

标签: python csv dataframe


【解决方案1】:

你可以使用join,但是.join之前是字符串之间的分隔符,这里是''。您可以在apply 内加入: 我假设您希望每个 ID 有一行?

df = pd.DataFrame({'ID':[1773,1773,1773],'Order':[1,2,3], 'Sequence':['AAGG','TTGG','GGAA']})
# group df by ID, join all Sequences and convert to dataframe
final = df.groupby('ID')['Sequence'].apply(lambda x: ''.join(x)).to_frame().reset_index()

输出是

    ID      Sequence
 0  1773    AAGGTTGGGGAA

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

你可以只使用聚合函数来连接字符串。

df = pd.DataFrame({'ID':[1773,1773,1773,1774,1774,1774],'Order':[1,2,3,4,5,6], 'Sequence':['AAGG','TTGG','GGAA','GGTC','ATCG','AAGG']})
df.groupby("ID").agg({"Sequence":"sum"})

输出:

    Sequence
ID  
1773    AAGGTTGGGGAA
1774    GGTCATCGAAGG
​

或者,您可以将 .join 函数应用于您的聚合函数。

df.groupby("ID").agg({"Sequence":"".join})

除了这些@fmarm 还提供了另一种有趣的方式。

我建议您浏览这些链接以获得更多了解:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.join.html

Concatenate strings from several rows using Pandas groupby

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2020-03-31
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多