在Python中,将一个字符串与另一个字符串的一部分连接起来

在Python中,将一个字符串与另一个字符串的一部分连接起来,python,concatenation,Python,Concatenation,问题: 我有一个csv文件,其中一列包含部分城市名称(通常缺少前一个或两个字母),同一文件中的另一列包含其他信息,并且通常在该字符串的末尾包含缺少的一个或两个字母 e、 g。 第1栏 w约克 第3栏 单词Ne 我关于如何解决这个问题的逻辑是使用一个单独的CSV文件和有效的城市名称,并执行Python版本的VLOOKUP前置和后置连接,以便它仅在与有效的城市数据不匹配时进行连接 我被困在如何从第3列的字符串末尾(子字符串,但在一列中重复)提取一个或两个字符,并将其与第1列的字符串开头合并,但我已经

问题:

我有一个csv文件,其中一列包含部分城市名称(通常缺少前一个或两个字母),同一文件中的另一列包含其他信息,并且通常在该字符串的末尾包含缺少的一个或两个字母

e、 g。 第1栏 w约克

第3栏 单词Ne

我关于如何解决这个问题的逻辑是使用一个单独的CSV文件和有效的城市名称,并执行Python版本的VLOOKUP前置和后置连接,以便它仅在与有效的城市数据不匹配时进行连接

我被困在如何从第3列的字符串末尾(子字符串,但在一列中重复)提取一个或两个字符,并将其与第1列的字符串开头合并,但我已经知道如何执行我的其余想法

以下是使用熊猫进行连接的通用脚本:

pd.concat([col1, col2.set_axis(col1.index[-len(col2):], inplace=False)], axis=1)
增加a-2能解决这个问题吗?i、 e

pd.concat([col1, col2.set_axis(col1.index[-len(col2)-2:], inplace=False)], axis=1)

谢谢大家!

如果您决定使用熊猫,在将csv加载到熊猫数据帧后,您可以通过这种方式从第3列中提取最后1或2个字符,并通过这种方式将其前置到第2列:

df_city_names['col3'].map(lambda x: "".join(str(x)[-(2 if len(str(x)) > 1 else 1 if len(str(x)) > 0 else ''):])) + df_city_names['col2']

如果你创建一个例子,你会得到更多更好的答案。尤其要确保输入和预期的测试数据是完整的(不是伪数据),并且可以轻松地剪切和粘贴到编辑器中,以便测试建议的解决方案。您计划如何解析CSV文件?熊猫?stdlib
csv
模块?还有别的吗?如果您使用的是
csv
模块,“重复下一列”的意思是“每行”。在csv.reader(infle)中通常的
行中:
循环,您可以执行
行[1]=行[1][:2]+行[3]
或任何您想要的操作,然后将其传递给
writer.writerow(行)
与往常一样。谢谢。这行是自迭代的,还是我需要将它作为for循环的一部分,以便它对每一行都这样做?嗨!它是自迭代的。它用这个lambda“映射”了每一行df_city_名称['col3']。简单地说,您编写的映射函数实际上是更新了第2列,还是只打印了一个预先设置好的版本作为输出?您提到,我需要预先将csv作为数据帧导入,我已经这样做了。map函数是否预先添加了数据框或csv等中存储的信息?它与vlookup相关,并在这个“映射”步骤之后将输出写入文件。嗨!它不会更新它。它只打印出来。您可以将其存储为一个单独的列,通过在其左侧添加df_city_names['col4']=或通过添加df_city_names['col3']=更新col3。此外,我看到您编辑了该问题。请注意,pandas.concat不会通过将传递的参数列中的每个值追加在一起来创建合并列。它相当于“cbind”或“rbind”它们。因此,除非“cbind”是你的目标,否则pd.concat不是你需要的。