我正在研究一种不断写入的爬行功能output.csv
.如果是第一次传递,它会将带有列的第一行写入header
空白文件.对于以下传递,它将append
没有标题.
我的问题是列顺序混乱.我希望他们遵循我指定的顺序df = pd.DataFrame
.
import pandas as pd
input = pd.read_csv(input.csv, delimiter=",")
run = 0
def crawl(x):
global run
run = run + 1
#Assign strings a, b, c
df = pd.DataFrame({"A": [a], "B": [b], "C": [c]})
if run == 1:
df.to_csv("output.csv")
if run != 1:
df.to_csv("output.csv", header=None, mode="a")
input["X"].apply(crawl, axis=1)
Run Code Online (Sandbox Code Playgroud) 我是一个Python新手,但我知道我可以在函数中使用可变数量的多个参数*args
.
此脚本查找word
任意数量的字符串*sources
:
def find(word, *sources):
for i in list(sources):
if word in i:
return True
source1 = "This is a string"
source2 = "This is Wow!"
if find("string", source1, source2) is True:
print "Succeed"
Run Code Online (Sandbox Code Playgroud)
但是,是否可以在一个函数中指定"多个"多个参数(*args
)?在这种情况下,这将寻找多个*words
倍数*sources
.
如,比喻:
if find("string", "Wow!", source1, source2) is True:
print "Succeed"
else:
print "Fail"
Run Code Online (Sandbox Code Playgroud)
如何让脚本识别出什么是a word
,什么应该是source
?
在字符串匹配后,如何获取列中的下一个值?
regex = 'ABC'
row_match = df["column1"].str.match(regex, case=False)
Run Code Online (Sandbox Code Playgroud)
即如何获取同一列中下一行的值,在ABC
可以找到字符串的那一行之后?
我尝试迭代一行iterrows
,但我无法让它工作.
进入Pandas DataFrame,我正在读一个csv文件,看起来像:
Run Code Online (Sandbox Code Playgroud)A B +--------------+---------------+ 0 | | ("t1", "t2") | +--------------+---------------+ 1 | ("t3", "t4") | | +--------------+---------------+
其中两个单元格中包含文字元组,其中两个单元格为空.
df = pd.read_csv(my_file.csv, dtype=str, delimiter=',',
converters={'A': ast.literal_eval, 'B': ast.literal_eval})
Run Code Online (Sandbox Code Playgroud)
转换器ast.literal_eval
可以很好地将文字元组转换为代码中的Python元组对象 - 但只要没有空单元格.因为我有空单元格,我得到错误:
SyntaxError:解析时意外的EOF
根据这个S/O答案,我应该尝试捕获空字符串的SyntaxError异常:
ast使用compile将源字符串(必须是表达式)编译成AST.如果源字符串不是有效表达式(如空字符串),则将通过编译引发SyntaxError.
但是,我不确定如何捕获单个单元格的异常read_csv
converters
.
最好的方法是什么?是否有其他方法可以将空字符串/单元格转换为literal_eval
可接受或忽略的对象?
注意:我的理解是在可读文件中使用文字元组并不总是最好的,但在我看来它很有用.
如何在Python中创建变量字符串的条件重命名?
比方说我有:
fruit = "Apfel"
Run Code Online (Sandbox Code Playgroud)
如果它是"Apfel",我想将其重命名为" Apple
".
或者,变量可以返回不同的字符串.
fruit = "Erdbeere"
Run Code Online (Sandbox Code Playgroud)
如果是这样,我想将其重命名为" Strawberry
".
我只想在包含 column 中特定文本的数据框中保留行"col"
。在这个例子中任一"WORD1"
或"WORD2"
。
df = df["col"].str.contains("WORD1|WORD2")
df.to_csv("write.csv")
Run Code Online (Sandbox Code Playgroud)
这将返回True
或False
。但是我如何让它写出与这些标准匹配的整行,而不仅仅是呈现布尔值?
我正在寻找一种类似于if "x" in variable:
不区分大小写和轻量级的方法来实现.
我已经尝试了一些这里的实现,但它们并不适合我的用法:Case不敏感'in' - Python
我想使下面的代码不区分大小写:
description = "SHORTEST"
if "Short" in description:
direction = "Short"
Run Code Online (Sandbox Code Playgroud)
优选地,不必将字符串转换为例如小写字母.或者如果我必须转换它,我想保持description
其原始状态 - 即使它是大写和小写混合.
对于我的使用,这是件好事,这种方法是通过识别非歧视"Short"
的"Shorter"
和"Shortest"
.
我有这个字符串,从网页输入.
s = "[u'967208', u'411600', u'460273']"
Run Code Online (Sandbox Code Playgroud)
我想删除括号[ ]
和u
和'
.
我也想制作new line breaks
逗号而不是逗号,
.
我花了很多时间寻找解决方案,包括编码和正则表达式,但我似乎无法让它工作.
更新:这是我用来检索字符串的内容:
import selenium
import re
input = webdriver.find_element_by_class_name("class_name")
s = re.findall("((?<=\()[0-9]*)", input.text)
Run Code Online (Sandbox Code Playgroud) 我在使用这段代码时遇到了一些麻烦:
if not fundbenchmark.endswith(("Index", "INDEX")) and fundbenchmark is not None:
fundbenchmark = "%s%s" % (fundbenchmark, " Index")
Run Code Online (Sandbox Code Playgroud)
追溯:
AttributeError: 'NoneType' object has no attribute 'endswith'
Run Code Online (Sandbox Code Playgroud)
当出现显然这个错误fundbenchmark
是None
.暗示存在问题and fundbenchmark is not None:
我在这个假设中是正确的还是可以在其他地方找到解释?
我有一个 csv 文件,其中有很多字符串"NULL"
,在几列中。
我想选择(过滤器),其具有行"NULL"
价值的任何的几个特定列。
例子:
Run Code Online (Sandbox Code Playgroud)["Firstname"] ["Lastname"] ["Profession"] "Jeff" "Goldblum" "NULL" "NULL" "Coltrane" "Musician" "Richard" "NULL" "Physicist"
在这里,我想过滤(选择)列中df
具有值"NULL"
的行"Firstname"
或 "Lastname"
– 但如果值"NULL"
在"Profession"
.
这设法None
在一列中过滤字符串(不是):
df = df[df["Firstname"].str.contains("NULL", case=False)]
Run Code Online (Sandbox Code Playgroud)
然而,我试图将"NULL"
字符串转换为None
通过:
df = df.where((pd.notnull(df)), None)
df.columns = df.columns.str.lower()
Run Code Online (Sandbox Code Playgroud)
鉴于上述str.contains
过滤,也许"NULL"
在转换为None
?