你不能在单引号字符串中写单引号,因为你实际上所做的是将字符串分成两个字符串,留下语法错误
comm='This is/a string with (some single quotes, inside like ' + F + ' this)'
F 只是一个变量,现在不是字符串的一部分
这行代码运行良好
df = pd.DataFrame({'Column1': ["string with 'single' quotes,inside like 'F' this", 'Data'],
'Column2':['Done','Data2']})
comm="string with 'single' quotes,inside like 'F' this"
print(df.query('Column1==@comm')['Column2'].values[0])
已编辑:-
您可以在单引号中使用单引号,方法是在其前面加上\'F\'
df = pd.DataFrame({'Column1': ['string with \'single\' quotes,inside like \'F\' this', 'Data'],
'Column2':['Done','Data2']})
comm='string with \'single\' quotes,inside like \'F\' this'
print(df.query('Column1==@comm')['Column2'].values[0])
这个技巧可以通过稍微改变格式来使查询适用于双引号格式。
import json
def convert_string(string): #Function which change format to be '"<string>"'
return json.dumps(string)
df = pd.DataFrame({'Column1': ['here', 'Data'],
'Column2':['Done','Data2']})
comm="here"
converted = convert_string(comm)
print(df.query('Column1=={}'.format(converted))['Column2'].values[0])
更好的解决方案是使用异常。
df = pd.DataFrame({'Column1': ['here', 'Data'],
'Column2':['Done','Data2']})
comm="here"
try:
print(df.query('Column1==@comm')['Column2'].values[0])
except:
print(df.query("Column1==@comm")['Column2'].values[0])
已编辑 - 2:
这个脚本可以非常快速地从数据框中删除所有符号。
#Create random dataframe
import pandas as pd
import numpy as np
import random
import string
random.seed(0)
def random_String(Length=20):
letters = string.ascii_lowercase + string.punctuation
return ''.join(random.choice(letters) for i in range(Length))
data_shape = 100000
data = {'A':[random_String() for i in range(data_shape)],'B':['Here string {}'.format(i) for i in range(data_shape)]}
df = pd.DataFrame(data)
df.head()
输出[1]:
甲乙
0 {y[}!cq'&z]`t%w,~n'i 这里是字符串 0
1 si[g.^q)>^-~jtg?e~{_];/a.&_|vp?u>|这里是字符串 3
4 em+op^j^)#ffu}'>*s 这里是字符串 4
def remove_symbols(s): #Function remove symbols from gived column
return s.translate(str.maketrans('', '', string.punctuation))
def convert_data(pandas_series):
return pandas_series.apply(remove_symbols)
df['A'] = convert_data(df['A'])
df.head()
输出[2]:
甲乙
0 ycqztwni 这里是字符串 0
1 sigqjtge 这里是字符串 1
2 vgwunqda 这里是字符串 2
3 fzavpu 这里字符串 3
4 emopjffugts 这里是字符串 4